diff --git a/tools/hermit_proxy/src/uhyve/uhyve.rs b/tools/hermit_proxy/src/uhyve/uhyve.rs index c9abdc39a..fa665fff4 100644 --- a/tools/hermit_proxy/src/uhyve/uhyve.rs +++ b/tools/hermit_proxy/src/uhyve/uhyve.rs @@ -19,29 +19,30 @@ pub mod ioctl { ioctl!(get_version with io!(KVMIO, 0x00)); ioctl!(create_vm with io!(KVMIO, 0x01)); - ioctl!(get_msr_index_list with iorw!(KVMIO, 0x02, mem::size_of::())); + ioctl!(read get_msr_index_list with KVMIO, 0x02; kvm_msr_list); ioctl!(check_extension with io!(KVMIO, 0x03)); ioctl!(get_vcpu_mmap_size with io!(KVMIO, 0x04)); - ioctl!(get_supported_cpuid with iorw!(KVMIO, 0x05, mem::size_of::())); - ioctl!(get_emulated_cpuid with iorw!(KVMIO, 0x09, mem::size_of::())); - ioctl!(set_cpuid2 with iow!(KVMIO, 0x90, mem::size_of::())); + + ioctl!(read get_supported_cpuid with KVMIO, 0x05; kvm_cpuid2); + ioctl!(read get_emulated_cpuid with KVMIO,0x09; kvm_cpuid2); + ioctl!(write set_cpuid2 with KVMIO, 0x90; kvm_cpuid2); - - ioctl!(set_memory_region with iorw!(KVMIO, 0x40,mem::size_of::())); ioctl!(create_vcpu with io!(KVMIO, 0x41)); - ioctl!(get_dirty_log with iow!(KVMIO, 0x42, mem::size_of::())); - ioctl!(set_memory_alias with iow!(KVMIO, 0x43, mem::size_of::())); + ioctl!(read get_dirty_log with KVMIO, 0x42; kvm_dirty_log); + ioctl!(write set_memory_alias with KVMIO, 0x43; kvm_memory_alias); ioctl!(set_nr_mmu_pages with io!(KVMIO, 0x44)); ioctl!(get_nr_mmu_pages with io!(KVMIO, 0x45)); - ioctl!(set_user_memory_region with iow!(KVMIO, 0x46, mem::size_of::())); + + ioctl!(write set_memory_region with KVMIO, 0x40; kvm_memory_region); + ioctl!(write set_user_memory_region with KVMIO, 0x46; kvm_userspace_memory_region); ioctl!(create_irqchip with io!(KVMIO, 0x60)); ioctl!(run with io!(KVMIO, 0x80)); - ioctl!(get_regs with ior!(KVMIO, 0x81, mem::size_of::())); - ioctl!(set_regs with iow!(KVMIO, 0x82, mem::size_of::())); - ioctl!(get_sregs with ior!(KVMIO, 0x83, mem::size_of::())); - ioctl!(set_sregs with iow!(KVMIO, 0x84, mem::size_of::())); + ioctl!(read get_regs with KVMIO, 0x81; kvm_regs); + ioctl!(write set_regs with KVMIO, 0x82; kvm_regs); + ioctl!(read get_sregs with KVMIO, 0x83; kvm_sregs); + ioctl!(write set_sregs with KVMIO, 0x84; kvm_sregs); } diff --git a/tools/hermit_proxy/src/uhyve/vcpu.rs b/tools/hermit_proxy/src/uhyve/vcpu.rs index 6a361694d..7687df0fb 100644 --- a/tools/hermit_proxy/src/uhyve/vcpu.rs +++ b/tools/hermit_proxy/src/uhyve/vcpu.rs @@ -41,6 +41,7 @@ pub struct VirtualCPU { vm_fd: libc::c_int, pub vcpu_fd: libc::c_int, id: u8, + file: File, run_mem: Mmap } @@ -53,13 +54,15 @@ impl VirtualCPU { debug!("Got fd {}", fd); + let file = unsafe { File::from_raw_fd(fd) }; + let run_mem = unsafe { - Mmap::open_with_offset(&File::from_raw_fd(fd), Protection::ReadWrite, 0, VirtualCPU::get_mmap_size(kvm_fd)?) + Mmap::open_with_offset(&file, Protection::ReadWrite, 0, VirtualCPU::get_mmap_size(kvm_fd)?) .map_err(|x| panic!("{:?}", x) )//Error::InvalidFile) }?; let cpu = VirtualCPU { - vm_fd: vm_fd, vcpu_fd: fd, id: id, run_mem: run_mem + vm_fd: vm_fd, vcpu_fd: fd, id: id, file: file, run_mem: run_mem }; if id == 0 { @@ -95,7 +98,7 @@ impl VirtualCPU { pub fn get_sregs(&self) -> Result { let mut sregs = kvm_sregs::empty(); unsafe { - uhyve::ioctl::get_sregs(self.vcpu_fd, (&mut sregs) as *mut kvm_sregs as *mut u8) + uhyve::ioctl::get_sregs(self.vcpu_fd, (&mut sregs) as *mut kvm_sregs) .map_err(|x| Error::FailedIOCTL(x))?; } @@ -104,7 +107,7 @@ impl VirtualCPU { pub fn set_sregs(&self, mut sregs: kvm_sregs) -> Result<()> { unsafe { - uhyve::ioctl::set_sregs(self.vcpu_fd, (&mut sregs) as *mut kvm_sregs as *mut u8) + uhyve::ioctl::set_sregs(self.vcpu_fd, (&mut sregs) as *mut kvm_sregs) .map_err(|x| Error::FailedIOCTL(x))?; } @@ -113,7 +116,7 @@ impl VirtualCPU { pub fn set_regs(&self, mut regs: kvm_regs) -> Result<()> { unsafe { - uhyve::ioctl::set_regs(self.vcpu_fd, (&mut regs) as *mut kvm_regs as *mut u8) + uhyve::ioctl::set_regs(self.vcpu_fd, (&mut regs) as *mut kvm_regs) .map_err(|x| Error::FailedIOCTL(x))?; } @@ -123,7 +126,7 @@ impl VirtualCPU { pub fn get_supported_cpuid(&self) -> Result { let mut cpuid = kvm_cpuid2::empty(); unsafe { - uhyve::ioctl::get_supported_cpuid(self.vm_fd, (&mut cpuid) as *mut kvm_cpuid2 as *mut u8) + uhyve::ioctl::get_supported_cpuid(self.vm_fd, (&mut cpuid) as *mut kvm_cpuid2) .map_err(|x| Error::FailedIOCTL(x))?; } @@ -132,7 +135,7 @@ impl VirtualCPU { pub fn set_cpuid2(&self, mut cpuid: kvm_cpuid2) -> Result<()> { unsafe { - uhyve::ioctl::set_cpuid2(self.vm_fd, (&mut cpuid) as *mut kvm_cpuid2 as *mut u8) + uhyve::ioctl::set_cpuid2(self.vm_fd, (&mut cpuid) as *mut kvm_cpuid2) .map_err(|x| Error::FailedIOCTL(x))?; } diff --git a/tools/hermit_proxy/src/uhyve/vm.rs b/tools/hermit_proxy/src/uhyve/vm.rs index 62faa9724..6e0e23808 100644 --- a/tools/hermit_proxy/src/uhyve/vm.rs +++ b/tools/hermit_proxy/src/uhyve/vm.rs @@ -115,8 +115,7 @@ impl VirtualMachine { pub fn set_user_memory_region(&self, mut region: kvm_userspace_memory_region) -> Result<()> { unsafe { - let p: *mut kvm_userspace_memory_region = &mut region; - uhyve::ioctl::set_user_memory_region(self.vm_fd, p as *mut u8) + uhyve::ioctl::set_user_memory_region(self.vm_fd, (&mut region) as *mut kvm_userspace_memory_region) .map_err(|x| Error::FailedIOCTL(x)).map(|_| ()) } }