mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-05 16:47:27 -04:00
unix: add SchedSetAttr and SchedGetAttr for Linux
Add wrappers for sched_getattr(2) and sched_setattr(2), as well as various SCHED_ values usable for these. The kludge in linux/types.go is needed so we can include both linux/sched/types.h (for struct sched_attr) and sched.h (for a few defines from include/bits/cpu-set.h). Unfortunately, they both define struct sched_param, thus the need to mask one of the definitions. Change-Id: I3e13cf49ccef7ae81a75d33826d18de84a52106d Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com> Reviewed-on: https://go-review.googlesource.com/c/sys/+/516756 Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Ian Lance Taylor <iant@google.com>
This commit is contained in:
committed by
Gopher Robot
parent
60ecf13377
commit
ee578879d8
@@ -138,6 +138,11 @@ struct termios2 {
|
|||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/rtc.h>
|
#include <linux/rtc.h>
|
||||||
#include <linux/rtnetlink.h>
|
#include <linux/rtnetlink.h>
|
||||||
|
// This is to avoid a conflict of struct sched_param being defined by
|
||||||
|
// both the kernel and the glibc (sched.h) headers.
|
||||||
|
#define sched_param kernel_sched_param
|
||||||
|
#include <linux/sched/types.h>
|
||||||
|
#undef kernel_sched_param
|
||||||
#include <linux/shm.h>
|
#include <linux/shm.h>
|
||||||
#include <linux/socket.h>
|
#include <linux/socket.h>
|
||||||
#include <linux/stat.h>
|
#include <linux/stat.h>
|
||||||
@@ -5796,3 +5801,7 @@ const (
|
|||||||
RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = C.RISCV_HWPROBE_MISALIGNED_UNSUPPORTED
|
RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = C.RISCV_HWPROBE_MISALIGNED_UNSUPPORTED
|
||||||
RISCV_HWPROBE_MISALIGNED_MASK = C.RISCV_HWPROBE_MISALIGNED_MASK
|
RISCV_HWPROBE_MISALIGNED_MASK = C.RISCV_HWPROBE_MISALIGNED_MASK
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type SchedAttr C.struct_sched_attr
|
||||||
|
|
||||||
|
const SizeofSchedAttr = C.sizeof_struct_sched_attr
|
||||||
|
|||||||
@@ -583,6 +583,7 @@ ccflags="$@"
|
|||||||
$2 ~ /^PERF_/ ||
|
$2 ~ /^PERF_/ ||
|
||||||
$2 ~ /^SECCOMP_MODE_/ ||
|
$2 ~ /^SECCOMP_MODE_/ ||
|
||||||
$2 ~ /^SEEK_/ ||
|
$2 ~ /^SEEK_/ ||
|
||||||
|
$2 ~ /^SCHED_/ ||
|
||||||
$2 ~ /^SPLICE_/ ||
|
$2 ~ /^SPLICE_/ ||
|
||||||
$2 ~ /^SYNC_FILE_RANGE_/ ||
|
$2 ~ /^SYNC_FILE_RANGE_/ ||
|
||||||
$2 !~ /IOC_MAGIC/ &&
|
$2 !~ /IOC_MAGIC/ &&
|
||||||
|
|||||||
@@ -2471,6 +2471,29 @@ func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *
|
|||||||
return pselect6(nfd, r, w, e, mutableTimeout, kernelMask)
|
return pselect6(nfd, r, w, e, mutableTimeout, kernelMask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//sys schedSetattr(pid int, attr *SchedAttr, flags uint) (err error)
|
||||||
|
//sys schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error)
|
||||||
|
|
||||||
|
// SchedSetAttr is a wrapper for sched_setattr(2) syscall.
|
||||||
|
// https://man7.org/linux/man-pages/man2/sched_setattr.2.html
|
||||||
|
func SchedSetAttr(pid int, attr *SchedAttr, flags uint) error {
|
||||||
|
if attr == nil {
|
||||||
|
return EINVAL
|
||||||
|
}
|
||||||
|
attr.Size = SizeofSchedAttr
|
||||||
|
return schedSetattr(pid, attr, flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SchedGetAttr is a wrapper for sched_getattr(2) syscall.
|
||||||
|
// https://man7.org/linux/man-pages/man2/sched_getattr.2.html
|
||||||
|
func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) {
|
||||||
|
attr := &SchedAttr{}
|
||||||
|
if err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return attr, nil
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unimplemented
|
* Unimplemented
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2821,6 +2821,23 @@ const (
|
|||||||
RWF_SUPPORTED = 0x1f
|
RWF_SUPPORTED = 0x1f
|
||||||
RWF_SYNC = 0x4
|
RWF_SYNC = 0x4
|
||||||
RWF_WRITE_LIFE_NOT_SET = 0x0
|
RWF_WRITE_LIFE_NOT_SET = 0x0
|
||||||
|
SCHED_BATCH = 0x3
|
||||||
|
SCHED_DEADLINE = 0x6
|
||||||
|
SCHED_FIFO = 0x1
|
||||||
|
SCHED_FLAG_ALL = 0x7f
|
||||||
|
SCHED_FLAG_DL_OVERRUN = 0x4
|
||||||
|
SCHED_FLAG_KEEP_ALL = 0x18
|
||||||
|
SCHED_FLAG_KEEP_PARAMS = 0x10
|
||||||
|
SCHED_FLAG_KEEP_POLICY = 0x8
|
||||||
|
SCHED_FLAG_RECLAIM = 0x2
|
||||||
|
SCHED_FLAG_RESET_ON_FORK = 0x1
|
||||||
|
SCHED_FLAG_UTIL_CLAMP = 0x60
|
||||||
|
SCHED_FLAG_UTIL_CLAMP_MAX = 0x40
|
||||||
|
SCHED_FLAG_UTIL_CLAMP_MIN = 0x20
|
||||||
|
SCHED_IDLE = 0x5
|
||||||
|
SCHED_NORMAL = 0x0
|
||||||
|
SCHED_RESET_ON_FORK = 0x40000000
|
||||||
|
SCHED_RR = 0x2
|
||||||
SCM_CREDENTIALS = 0x2
|
SCM_CREDENTIALS = 0x2
|
||||||
SCM_RIGHTS = 0x1
|
SCM_RIGHTS = 0x1
|
||||||
SCM_TIMESTAMP = 0x1d
|
SCM_TIMESTAMP = 0x1d
|
||||||
|
|||||||
@@ -2197,3 +2197,23 @@ func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {
|
|||||||
RawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))
|
RawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_SCHED_SETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(flags))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_SCHED_GETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(size), uintptr(flags), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|||||||
@@ -5868,3 +5868,18 @@ const (
|
|||||||
VIRTIO_NET_HDR_GSO_UDP_L4 = 0x5
|
VIRTIO_NET_HDR_GSO_UDP_L4 = 0x5
|
||||||
VIRTIO_NET_HDR_GSO_ECN = 0x80
|
VIRTIO_NET_HDR_GSO_ECN = 0x80
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type SchedAttr struct {
|
||||||
|
Size uint32
|
||||||
|
Policy uint32
|
||||||
|
Flags uint64
|
||||||
|
Nice int32
|
||||||
|
Priority uint32
|
||||||
|
Runtime uint64
|
||||||
|
Deadline uint64
|
||||||
|
Period uint64
|
||||||
|
Util_min uint32
|
||||||
|
Util_max uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
const SizeofSchedAttr = 0x38
|
||||||
|
|||||||
Reference in New Issue
Block a user