// sched_setattr(2) func SetAttr(pid int, attr SchedAttr) error { cAttr := C.struct_sched_attr{ C.__u32(C.SCHED_ATTR_SIZE), C.__u32(attr.Policy), C.__u64(attr.Flags), C.__s32(attr.Nice), C.__u32(attr.Priority), C.__u64(attr.Runtime.Nanoseconds()), C.__u64(attr.Deadline.Nanoseconds()), C.__u64(attr.Period.Nanoseconds()), } _, err := C.sched_setattr(C.pid_t(pid), &cAttr, C.uint(0)) return err }
func (vm *Vm) SetEventFd( eventfd *EventFd, paddr Paddr, size uint, is_pio bool, unbind bool, has_value bool, value uint64) error { var ioeventfd C.struct_kvm_ioeventfd ioeventfd.addr = C.__u64(paddr) ioeventfd.len = C.__u32(size) ioeventfd.fd = C.__s32(eventfd.Fd()) ioeventfd.datamatch = C.__u64(value) if is_pio { ioeventfd.flags |= C.__u32(C.IoctlIoEventFdFlagPio) } if unbind { ioeventfd.flags |= C.__u32(C.IoctlIoEventFdFlagDeassign) } if has_value { ioeventfd.flags |= C.__u32(C.IoctlIoEventFdFlagDatamatch) } // Bind / unbind the eventfd. _, _, e := syscall.Syscall( syscall.SYS_IOCTL, uintptr(vm.fd), uintptr(C.IoctlIoEventFd), uintptr(unsafe.Pointer(&ioeventfd))) if e != 0 { return e } // Success. return nil }