diff --git a/Cargo.lock b/Cargo.lock index 11eb1d69ff..577b56385b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1461,7 +1461,7 @@ checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" name = "dbs-acpi" version = "0.1.0" dependencies = [ - "vm-memory 0.17.1", + "vm-memory", ] [[package]] @@ -1473,7 +1473,7 @@ dependencies = [ "libc", "nix 0.23.2", "thiserror 1.0.69", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -1495,7 +1495,7 @@ dependencies = [ "nix 0.26.4", "test-utils", "thiserror 1.0.69", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -1514,7 +1514,7 @@ dependencies = [ "test-utils", "thiserror 1.0.69", "vm-fdt", - "vm-memory 0.17.1", + "vm-memory", ] [[package]] @@ -1575,7 +1575,7 @@ dependencies = [ "vfio-bindings", "vfio-ioctls", "virtio-queue", - "vm-memory 0.17.1", + "vm-memory", ] [[package]] @@ -1650,7 +1650,7 @@ dependencies = [ "vhost", "virtio-bindings", "virtio-queue", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -1842,7 +1842,7 @@ dependencies = [ "vfio-bindings", "vfio-ioctls", "virtio-queue", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -2258,7 +2258,7 @@ dependencies = [ "nix 0.24.3", "radix_trie", "virtio-queue", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -3828,7 +3828,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de72cb02c55ecffcf75fe78295926f872eb6eb0a58d629c58a8c324dc26380f6" dependencies = [ - "vm-memory 0.17.1", + "vm-memory", ] [[package]] @@ -4479,7 +4479,7 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", - "vm-memory 0.17.1", + "vm-memory", ] [[package]] @@ -4508,7 +4508,7 @@ dependencies = [ "tar", "tokio", "url", - "vm-memory 0.17.1", + "vm-memory", ] [[package]] @@ -8256,15 +8256,15 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vfio-bindings" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4bc5b4aade27640cea4ee1ce50ef3614598050dc97e44714b9daea779d1b59a" +checksum = "188dac3057a0cbc94470085204c84b82ff7ec5dac629a514323cd133d1f9abe0" [[package]] name = "vfio-ioctls" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c85bf46a63452d82e7df8e3ed052f07969507aeb5685ef9bf01d8db3ea74c36" +checksum = "d4b1d98dff7f0d219278e406323e7eda4d426447bd203c7828189baf0d8c07b7" dependencies = [ "byteorder", "kvm-bindings", @@ -8273,7 +8273,7 @@ dependencies = [ "log", "thiserror 2.0.18", "vfio-bindings", - "vm-memory 0.16.2", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -8286,7 +8286,7 @@ dependencies = [ "bitflags 2.11.0", "libc", "uuid 1.22.0", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -8338,7 +8338,7 @@ dependencies = [ "libc", "log", "virtio-bindings", - "vm-memory 0.17.1", + "vm-memory", "vmm-sys-util 0.15.0", ] @@ -8348,17 +8348,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e21282841a059bb62627ce8441c491f09603622cd5a21c43bfedc85a2952f23" -[[package]] -name = "vm-memory" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd5e56d48353c5f54ef50bd158a0452fc82f5383da840f7b8efc31695dd3b9d" -dependencies = [ - "libc", - "thiserror 1.0.69", - "winapi", -] - [[package]] name = "vm-memory" version = "0.17.1" diff --git a/Cargo.toml b/Cargo.toml index 4fd69754f1..b2ab63a8aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,8 +77,8 @@ kvm-bindings = "0.14.0" kvm-ioctls = "0.24.0" linux-loader = "0.13.0" seccompiler = "0.5.0" -vfio-bindings = "0.6.1" -vfio-ioctls = "0.5.0" +vfio-bindings = "0.6.2" +vfio-ioctls = "0.6.0" virtio-bindings = "0.2.0" virtio-queue = "0.17.0" vm-fdt = "0.3.0" diff --git a/src/dragonball/dbs_pci/src/vfio.rs b/src/dragonball/dbs_pci/src/vfio.rs index e44c84cf74..8e9a5cc595 100644 --- a/src/dragonball/dbs_pci/src/vfio.rs +++ b/src/dragonball/dbs_pci/src/vfio.rs @@ -706,11 +706,13 @@ impl Region { // FIXME: add readonly flag into vfio_dma_map in future PR when it is needed. // issue #8725 - if let Err(e) = vfio_container.vfio_dma_map( - self.start.raw_value() + self.mmaps[i].mmap_offset, - self.mmaps[i].mmap_size, - host_addr as u64, - ) { + if let Err(e) = unsafe { + vfio_container.vfio_dma_map( + self.start.raw_value() + self.mmaps[i].mmap_offset, + self.mmaps[i].mmap_size as usize, + host_addr as *mut u8, + ) + } { error!("vfio dma map failed, pci p2p dma may not work, due to {e:?}"); } } @@ -744,7 +746,7 @@ impl Region { if let Err(e) = vfio_container.vfio_dma_unmap( self.start.raw_value() + self.mmaps[i].mmap_offset, - self.mmaps[i].mmap_size, + self.mmaps[i].mmap_size as usize, ) { error!("vfio dma unmap failed, pci p2p dma may not work, due to {e:?}"); } @@ -771,7 +773,7 @@ impl Region { for i in 0..self.mmaps.len() { if let Err(e) = vfio_container.vfio_dma_unmap( self.start.raw_value() + self.mmaps[i].mmap_offset, - self.mmaps[i].mmap_size, + self.mmaps[i].mmap_size as usize, ) { error!("vfio dma unmap failed, pci p2p dma may not work, due to {e:?}"); } @@ -779,11 +781,13 @@ impl Region { self.set_user_memory_region(i, true, vm)?; // FIXME: add readonly flag into vfio_dma_map in future PR when it is needed. // issue #8725 - if let Err(e) = vfio_container.vfio_dma_map( - self.start.raw_value() + self.mmaps[i].mmap_offset, - self.mmaps[i].mmap_size, - self.mmaps[i].mmap_host_addr, - ) { + if let Err(e) = unsafe { + vfio_container.vfio_dma_map( + self.start.raw_value() + self.mmaps[i].mmap_offset, + self.mmaps[i].mmap_size as usize, + self.mmaps[i].mmap_host_addr as *mut u8, + ) + } { error!("vfio dma map failed, pci p2p dma may not work, due to {e:?}"); } } diff --git a/src/dragonball/src/device_manager/vfio_dev_mgr/mod.rs b/src/dragonball/src/device_manager/vfio_dev_mgr/mod.rs index f176ffbceb..a9f89a467c 100644 --- a/src/dragonball/src/device_manager/vfio_dev_mgr/mod.rs +++ b/src/dragonball/src/device_manager/vfio_dev_mgr/mod.rs @@ -499,9 +499,11 @@ impl VfioDeviceMgr { "readonly" => readonly, ); //FIXME: add readonly flag when related commit is pushed to upstream vfio-ioctls - self.get_vfio_container()? - .vfio_dma_map(iova, size, user_addr) - .map_err(VfioDeviceError::VfioIoctlError)?; + unsafe { + self.get_vfio_container()? + .vfio_dma_map(iova, size as usize, user_addr as *mut u8) + } + .map_err(VfioDeviceError::VfioIoctlError)?; self.locked_vm_size += size; Ok(()) } @@ -516,7 +518,7 @@ impl VfioDeviceMgr { let size = region.len(); self.get_vfio_container()? - .vfio_dma_unmap(gpa, size) + .vfio_dma_unmap(gpa, size as usize) .map_err(VfioDeviceError::VfioIoctlError)?; self.locked_vm_size -= size;