diff options
Diffstat (limited to 'container/syscall.go')
| -rw-r--r-- | container/syscall.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/container/syscall.go b/container/syscall.go index ef9fb153..e5f86cf6 100644 --- a/container/syscall.go +++ b/container/syscall.go @@ -3,6 +3,8 @@ package container import ( . "syscall" "unsafe" + + "hakurei.app/container/std" ) // Prctl manipulates various aspects of the behavior of the calling thread or process. @@ -41,6 +43,49 @@ func Isatty(fd int) bool { return r == 0 } +// include/uapi/linux/sched.h +const ( + SCHED_NORMAL = iota + SCHED_FIFO + SCHED_RR + SCHED_BATCH + _ // SCHED_ISO: reserved but not implemented yet + SCHED_IDLE + SCHED_DEADLINE + SCHED_EXT +) + +// schedParam is equivalent to struct sched_param from include/linux/sched.h. +type schedParam struct { + // sched_priority + priority std.ScmpInt +} + +// schedSetscheduler sets both the scheduling policy and parameters for the +// thread whose ID is specified in tid. If tid equals zero, the scheduling +// policy and parameters of the calling thread will be set. +// +// This function is unexported because it is [very subtle to use correctly]. The +// function signature in libc is misleading: pid actually refers to a thread ID. +// The glibc wrapper for this system call ignores this semantic and exposes +// this counterintuitive behaviour. +// +// This function is only called from the container setup thread. Do not reuse +// this if you do not have something similar in place! +// +// [very subtle to use correctly]: https://www.openwall.com/lists/musl/2016/03/01/4 +func schedSetscheduler(tid, policy int, param *schedParam) error { + if r, _, errno := Syscall( + SYS_SCHED_SETSCHEDULER, + uintptr(tid), + uintptr(policy), + uintptr(unsafe.Pointer(param)), + ); r < 0 { + return errno + } + return nil +} + // IgnoringEINTR makes a function call and repeats it if it returns an // EINTR error. This appears to be required even though we install all // signal handlers with SA_RESTART: see #22838, #38033, #38836, #40846. |
