Skip to content

Commit ae7b046

Browse files
Manciukicbchalios
authored andcommitted
chore: update vm-memory to 0.17.0
This commit updates VM memory and other rust-vmm dependencies: - kvm-bindings from 0.13.0 to 0.14.0 - kvm-ioctls from 0.23.0 to 0.24.0 - linux-loader from 0.13.0 to 0.13.1 - vm-memory from 0.16.2 to 0.17.0 - vm-superio from 0.8.0 to 0.8.1 Signed-off-by: Riccardo Mancini <[email protected]>
1 parent 313468e commit ae7b046

File tree

6 files changed

+58
-57
lines changed

6 files changed

+58
-57
lines changed

Cargo.lock

Lines changed: 27 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/acpi-tables/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ bench = false
1515
[dependencies]
1616
displaydoc = "0.2.5"
1717
thiserror = "2.0.17"
18-
vm-memory = { version = "0.16.2", features = ["backend-mmap", "backend-bitmap"] }
18+
vm-memory = { version = "0.17.0", features = ["backend-mmap", "backend-bitmap"] }
1919
zerocopy = { version = "0.8.27", features = ["derive"] }
2020

2121
[lints]

src/vmm/Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ displaydoc = "0.2.5"
3333
event-manager = "0.4.1"
3434
gdbstub = { version = "0.7.7", optional = true }
3535
gdbstub_arch = { version = "0.3.2", optional = true }
36-
kvm-bindings = { version = "0.13.0", features = ["fam-wrappers", "serde"] }
37-
kvm-ioctls = "0.23.0"
36+
kvm-bindings = { version = "0.14.0", features = ["fam-wrappers", "serde"] }
37+
kvm-ioctls = "0.24.0"
3838
libc = "0.2.176"
39-
linux-loader = "0.13.0"
39+
linux-loader = "0.13.1"
4040
log = { version = "0.4.28", features = ["std", "serde"] }
4141
log-instrument = { path = "../log-instrument", optional = true }
4242
memfd = "0.6.5"
@@ -53,11 +53,11 @@ utils = { path = "../utils" }
5353
uuid = "1.18.1"
5454
vhost = { version = "0.14.0", features = ["vhost-user-frontend"] }
5555
vm-allocator = { version = "0.1.3", features = ["serde"] }
56-
vm-memory = { version = "0.16.2", features = [
56+
vm-memory = { version = "0.17.0", features = [
5757
"backend-mmap",
5858
"backend-bitmap",
5959
] }
60-
vm-superio = "0.8.0"
60+
vm-superio = "0.8.1"
6161
vmm-sys-util = { version = "0.14.0", features = ["with-serde"] }
6262
zerocopy = { version = "0.8.27" }
6363

src/vmm/src/devices/virtio/vhost_user.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::sync::Arc;
1111
use vhost::vhost_user::message::*;
1212
use vhost::vhost_user::{Frontend, VhostUserFrontend};
1313
use vhost::{Error as VhostError, VhostBackend, VhostUserMemoryRegionInfo, VringConfigData};
14-
use vm_memory::{Address, Error as MmapError, GuestMemory, GuestMemoryError, GuestMemoryRegion};
14+
use vm_memory::{Address, GuestMemory, GuestMemoryError, GuestMemoryRegion};
1515
use vmm_sys_util::eventfd::EventFd;
1616

1717
use crate::devices::virtio::queue::Queue;
@@ -51,8 +51,8 @@ pub enum VhostUserError {
5151
VhostUserSetVringKick(VhostError),
5252
/// Set vring enable failed: {0}
5353
VhostUserSetVringEnable(VhostError),
54-
/// Failed to read vhost eventfd: {0}
55-
VhostUserMemoryRegion(MmapError),
54+
/// Failed to read vhost eventfd: No memory region found
55+
VhostUserNoMemoryRegion,
5656
/// Invalid used address
5757
UsedAddress(GuestMemoryError),
5858
}
@@ -371,9 +371,7 @@ impl<T: VhostUserHandleBackend> VhostUserHandleImpl<T> {
371371
let (mmap_handle, mmap_offset) = match region.file_offset() {
372372
Some(_file_offset) => (_file_offset.file().as_raw_fd(), _file_offset.start()),
373373
None => {
374-
return Err(VhostUserError::VhostUserMemoryRegion(
375-
MmapError::NoMemoryRegion,
376-
));
374+
return Err(VhostUserError::VhostUserNoMemoryRegion);
377375
}
378376
};
379377

src/vmm/src/vstate/memory.rs

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ pub use vm_memory::{
1717
Address, ByteValued, Bytes, FileOffset, GuestAddress, GuestMemory, GuestMemoryRegion,
1818
GuestUsize, MemoryRegionAddress, MmapRegion, address,
1919
};
20-
use vm_memory::{Error as VmMemoryError, GuestMemoryError, WriteVolatile};
20+
use vm_memory::{GuestMemoryError, WriteVolatile};
2121
use vmm_sys_util::errno;
2222

2323
use crate::DirtyBitmap;
2424
use crate::utils::{get_page_size, u64_to_usize};
2525
use crate::vmm_config::machine_config::HugePageConfig;
2626

27-
/// Type of GuestMemoryMmap.
28-
pub type GuestMemoryMmap = vm_memory::GuestMemoryMmap<Option<AtomicBitmap>>;
2927
/// Type of GuestRegionMmap.
3028
pub type GuestRegionMmap = vm_memory::GuestRegionMmap<Option<AtomicBitmap>>;
29+
/// Type of GuestMemoryMmap.
30+
pub type GuestMemoryMmap = vm_memory::GuestRegionCollection<GuestRegionMmap>;
3131
/// Type of GuestMmapRegion.
3232
pub type GuestMmapRegion = vm_memory::MmapRegion<Option<AtomicBitmap>>;
3333

@@ -40,8 +40,8 @@ pub enum MemoryError {
4040
WriteMemory(GuestMemoryError),
4141
/// Cannot create mmap region: {0}
4242
MmapRegionError(MmapRegionError),
43-
/// Cannot create guest memory: {0}
44-
VmMemoryError(VmMemoryError),
43+
/// Cannot create guest memory
44+
VmMemoryError,
4545
/// Cannot create memfd: {0}
4646
Memfd(memfd::Error),
4747
/// Cannot resize memfd file: {0}
@@ -86,7 +86,7 @@ pub fn create(
8686
builder.build().map_err(MemoryError::MmapRegionError)?,
8787
start,
8888
)
89-
.map_err(MemoryError::VmMemoryError)
89+
.ok_or(MemoryError::VmMemoryError)
9090
})
9191
.collect::<Result<Vec<_>, _>>()
9292
}
@@ -203,12 +203,10 @@ impl GuestMemoryExtension for GuestMemoryMmap {
203203

204204
/// Mark memory range as dirty
205205
fn mark_dirty(&self, addr: GuestAddress, len: usize) {
206-
let _ = self.try_access(len, addr, |_total, count, caddr, region| {
207-
if let Some(bitmap) = region.bitmap() {
208-
bitmap.mark_dirty(u64_to_usize(caddr.0), count);
209-
}
210-
Ok(count)
211-
});
206+
// ignore invalid ranges using .flatten()
207+
for slice in self.get_slices(addr, len).flatten() {
208+
slice.bitmap().mark_dirty(0, slice.len());
209+
}
212210
}
213211

214212
/// Dumps all contents of GuestMemoryMmap to a writer.
@@ -283,7 +281,7 @@ impl GuestMemoryExtension for GuestMemoryMmap {
283281
/// Resets all the memory region bitmaps
284282
fn reset_dirty(&self) {
285283
self.iter().for_each(|region| {
286-
if let Some(bitmap) = region.bitmap() {
284+
if let Some(bitmap) = (**region).bitmap() {
287285
bitmap.reset();
288286
}
289287
})
@@ -413,20 +411,14 @@ mod tests {
413411

414412
// Check that the dirty memory was set correctly
415413
for (addr, len, dirty) in &dirty_map {
416-
guest_memory
417-
.try_access(
418-
*len,
419-
GuestAddress(*addr as u64),
420-
|_total, count, caddr, region| {
421-
let offset = usize::try_from(caddr.0).unwrap();
422-
let bitmap = region.bitmap().as_ref().unwrap();
423-
for i in offset..offset + count {
424-
assert_eq!(bitmap.dirty_at(i), *dirty);
425-
}
426-
Ok(count)
427-
},
428-
)
429-
.unwrap();
414+
for slice in guest_memory
415+
.get_slices(GuestAddress(*addr as u64), *len)
416+
.flatten()
417+
{
418+
for i in 0..slice.len() {
419+
assert_eq!(slice.bitmap().dirty_at(i), *dirty);
420+
}
421+
}
430422
}
431423
}
432424

src/vmm/src/vstate/vm.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ pub enum VmError {
8181
CreateVcpu(VcpuError),
8282
/// The number of configured slots is bigger than the maximum reported by KVM: {0}
8383
NotEnoughMemorySlots(u32),
84-
/// Memory Error: {0}
85-
VmMemory(#[from] vm_memory::Error),
84+
/// Failed to add a memory region: {0}
85+
InsertRegion(#[from] vm_memory::GuestRegionCollectionError),
8686
/// Error calling mincore: {0}
8787
Mincore(vmm_sys_util::errno::Error),
8888
/// ResourceAllocator error: {0}

0 commit comments

Comments
 (0)