func (vcpu *Vcpu) SetMsr(index uint32, value uint64) error { // Setup our structure. data := make([]byte, C.msr_size(), C.msr_size()) // Set our index and value. C.msr_set(unsafe.Pointer(&data[0]), C.__u32(index), C.__u64(value)) // Execute our ioctl. _, _, e := syscall.Syscall( syscall.SYS_IOCTL, uintptr(vcpu.fd), uintptr(C.IoctlSetMsrs), uintptr(unsafe.Pointer(&data[0]))) if e != 0 { return e } return nil }
func (vcpu *Vcpu) GetMsr(index uint32) (uint64, error) { // Setup our structure. data := make([]byte, C.msr_size(), C.msr_size()) // Set our index to retrieve. C.msr_set(unsafe.Pointer(&data[0]), C.__u32(index), C.__u64(0)) // Execute our ioctl. _, _, e := syscall.Syscall( syscall.SYS_IOCTL, uintptr(vcpu.fd), uintptr(C.IoctlGetMsrs), uintptr(unsafe.Pointer(&data[0]))) if e != 0 { return 0, e } // Return our value. return uint64(C.msr_get(unsafe.Pointer(&data[0]))), nil }