Skip to content

Commit 8bc4faf

Browse files
committed
refactor: Have all memory creation method take similar arguments
Have all of them operate on some sort of list of (GuestAddress, usize) tuples, for consistency. Signed-off-by: Patrick Roy <[email protected]>
1 parent c21b76b commit 8bc4faf

File tree

3 files changed

+13
-21
lines changed

3 files changed

+13
-21
lines changed

src/vmm/src/persist.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,8 @@ fn guest_memory_from_file(
534534
track_dirty_pages: bool,
535535
) -> Result<GuestMemoryMmap, GuestMemoryFromFileError> {
536536
let mem_file = File::open(mem_file_path)?;
537-
let guest_mem = GuestMemoryMmap::snapshot_file(mem_file, mem_state, track_dirty_pages)?;
537+
let guest_mem =
538+
GuestMemoryMmap::snapshot_file(mem_file, mem_state.regions(), track_dirty_pages)?;
538539
Ok(guest_mem)
539540
}
540541

src/vmm/src/resources.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -456,16 +456,14 @@ impl VmResources {
456456
// because that would require running a backend process. If in the future we converge to
457457
// a single way of backing guest memory for vhost-user and non-vhost-user cases,
458458
// that would not be worth the effort.
459+
let regions = crate::arch::arch_memory_regions(self.machine_config.mem_size_mib << MIB_TO_BYTES_SHIFT);
459460
if vhost_user_device_used {
460461
GuestMemoryMmap::memfd_backed(
461-
self.machine_config.mem_size_mib,
462+
regions.as_ref(),
462463
self.machine_config.track_dirty_pages,
463464
self.machine_config.huge_pages,
464465
)
465466
} else {
466-
let regions = crate::arch::arch_memory_regions(
467-
self.machine_config.mem_size_mib << MIB_TO_BYTES_SHIFT,
468-
);
469467
GuestMemoryMmap::anonymous(
470468
regions.into_iter(),
471469
self.machine_config.track_dirty_pages,

src/vmm/src/vstate/memory.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ use vm_memory::{Error as VmMemoryError, GuestMemoryError, WriteVolatile};
2222
use vmm_sys_util::errno;
2323

2424
use crate::DirtyBitmap;
25-
use crate::arch::arch_memory_regions;
2625
use crate::utils::{MIB_TO_BYTES_SHIFT, get_page_size, u64_to_usize};
2726
use crate::vmm_config::machine_config::HugePageConfig;
2827

@@ -67,15 +66,15 @@ where
6766

6867
/// Creates a GuestMemoryMmap with `size` in MiB backed by a memfd.
6968
fn memfd_backed(
70-
mem_size_mib: usize,
69+
regions: &[(GuestAddress, usize)],
7170
track_dirty_pages: bool,
7271
huge_pages: HugePageConfig,
7372
) -> Result<Self, MemoryError> {
74-
let memfd_file = create_memfd(mem_size_mib, huge_pages.into())?.into_file();
75-
let regions = arch_memory_regions(mem_size_mib << MIB_TO_BYTES_SHIFT).into_iter();
73+
let size = regions.iter().map(|(_, size)| size).sum();
74+
let memfd_file = create_memfd(size, huge_pages.into())?.into_file();
7675

7776
Self::create(
78-
regions,
77+
regions.iter().copied(),
7978
libc::MAP_SHARED | huge_pages.mmap_flags(),
8079
Some(memfd_file),
8180
track_dirty_pages,
@@ -100,15 +99,10 @@ where
10099
/// and a `state` containing mapping information.
101100
fn snapshot_file(
102101
file: File,
103-
state: &GuestMemoryState,
102+
regions: impl Iterator<Item = (GuestAddress, usize)>,
104103
track_dirty_pages: bool,
105104
) -> Result<Self, MemoryError> {
106-
Self::create(
107-
state.regions(),
108-
libc::MAP_PRIVATE,
109-
Some(file),
110-
track_dirty_pages,
111-
)
105+
Self::create(regions, libc::MAP_PRIVATE, Some(file), track_dirty_pages)
112106
}
113107

114108
/// Describes GuestMemoryMmap through a GuestMemoryState struct.
@@ -327,10 +321,9 @@ impl GuestMemoryExtension for GuestMemoryMmap {
327321
}
328322

329323
fn create_memfd(
330-
size: usize,
324+
mem_size: usize,
331325
hugetlb_size: Option<memfd::HugetlbSize>,
332326
) -> Result<memfd::Memfd, MemoryError> {
333-
let mem_size = size << MIB_TO_BYTES_SHIFT;
334327
// Create a memfd.
335328
let opts = memfd::MemfdOptions::default()
336329
.hugetlb(hugetlb_size)
@@ -570,7 +563,7 @@ mod tests {
570563
guest_memory.dump(&mut memory_file).unwrap();
571564

572565
let restored_guest_memory =
573-
GuestMemoryMmap::snapshot_file(memory_file, &memory_state, false).unwrap();
566+
GuestMemoryMmap::snapshot_file(memory_file, memory_state.regions(), false).unwrap();
574567

575568
// Check that the region contents are the same.
576569
let mut restored_region = vec![0u8; page_size * 2];
@@ -629,7 +622,7 @@ mod tests {
629622

630623
// We can restore from this because this is the first dirty dump.
631624
let restored_guest_memory =
632-
GuestMemoryMmap::snapshot_file(file, &memory_state, false).unwrap();
625+
GuestMemoryMmap::snapshot_file(file, memory_state.regions(), false).unwrap();
633626

634627
// Check that the region contents are the same.
635628
let mut restored_region = vec![0u8; region_size];

0 commit comments

Comments
 (0)