Skip to content

Commit 441f6a8

Browse files
committed
refactor: drop track_dirty_pages parameter from memory_init
We already know about dirty page tracking inside that function, based on whether the memory regions have a bitmap associated with them or not. So drop passing this information in again via a parameter, which saves us quite a bit of plumbing. Suggested-by: Nikita Kalyazin <[email protected]> Signed-off-by: Patrick Roy <[email protected]>
1 parent 1a9a236 commit 441f6a8

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

src/vmm/src/builder.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ fn create_vmm_and_vcpus(
155155
event_manager: &mut EventManager,
156156
guest_memory: GuestMemoryMmap,
157157
uffd: Option<Uffd>,
158-
track_dirty_pages: bool,
159158
vcpu_count: u8,
160159
kvm_capabilities: Vec<KvmCapability>,
161160
) -> Result<(Vmm, Vec<Vcpu>), StartMicrovmError> {
@@ -172,7 +171,7 @@ fn create_vmm_and_vcpus(
172171
kvm.check_memory(&guest_memory)
173172
.map_err(VmmError::Kvm)
174173
.map_err(StartMicrovmError::Internal)?;
175-
vm.memory_init(&guest_memory, track_dirty_pages)
174+
vm.memory_init(&guest_memory)
176175
.map_err(VmmError::Vm)
177176
.map_err(StartMicrovmError::Internal)?;
178177

@@ -292,7 +291,6 @@ pub fn build_microvm_for_boot(
292291
event_manager,
293292
guest_memory,
294293
None,
295-
vm_resources.machine_config.track_dirty_pages,
296294
vm_resources.machine_config.vcpu_count,
297295
cpu_template.kvm_capabilities.clone(),
298296
)?;
@@ -482,7 +480,6 @@ pub fn build_microvm_from_snapshot(
482480
event_manager,
483481
guest_memory,
484482
uffd,
485-
vm_resources.machine_config.track_dirty_pages,
486483
vm_resources.machine_config.vcpu_count,
487484
microvm_state.kvm_state.kvm_cap_modifiers.clone(),
488485
)?;
@@ -1140,7 +1137,7 @@ pub(crate) mod tests {
11401137

11411138
let kvm = Kvm::new(vec![]).unwrap();
11421139
let mut vm = Vm::new(&kvm).unwrap();
1143-
vm.memory_init(&guest_memory, false).unwrap();
1140+
vm.memory_init(&guest_memory).unwrap();
11441141
let mmio_device_manager = MMIODeviceManager::new();
11451142
let acpi_device_manager = ACPIDeviceManager::new();
11461143
#[cfg(target_arch = "x86_64")]
@@ -1394,7 +1391,7 @@ pub(crate) mod tests {
13941391
let kvm = Kvm::new(vec![]).expect("Cannot create Kvm");
13951392
#[allow(unused_mut)]
13961393
let mut vm = Vm::new(&kvm).unwrap();
1397-
vm.memory_init(&guest_memory, false).unwrap();
1394+
vm.memory_init(&guest_memory).unwrap();
13981395
let evfd = EventFd::new(libc::EFD_NONBLOCK).unwrap();
13991396

14001397
#[cfg(target_arch = "x86_64")]

src/vmm/src/device_manager/mmio.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ mod tests {
666666
let guest_mem = multi_region_mem(&[(start_addr1, 0x1000), (start_addr2, 0x1000)]);
667667
let kvm = Kvm::new(vec![]).expect("Cannot create Kvm");
668668
let mut vm = Vm::new(&kvm).unwrap();
669-
vm.memory_init(&guest_mem, false).unwrap();
669+
vm.memory_init(&guest_mem).unwrap();
670670
let mut device_manager = MMIODeviceManager::new();
671671
let mut resource_allocator = ResourceAllocator::new().unwrap();
672672

@@ -696,7 +696,7 @@ mod tests {
696696
let guest_mem = multi_region_mem(&[(start_addr1, 0x1000), (start_addr2, 0x1000)]);
697697
let kvm = Kvm::new(vec![]).expect("Cannot create Kvm");
698698
let mut vm = Vm::new(&kvm).unwrap();
699-
vm.memory_init(&guest_mem, false).unwrap();
699+
vm.memory_init(&guest_mem).unwrap();
700700
let mut device_manager = MMIODeviceManager::new();
701701
let mut resource_allocator = ResourceAllocator::new().unwrap();
702702

@@ -751,7 +751,7 @@ mod tests {
751751
let guest_mem = multi_region_mem(&[(start_addr1, 0x1000), (start_addr2, 0x1000)]);
752752
let kvm = Kvm::new(vec![]).expect("Cannot create Kvm");
753753
let mut vm = Vm::new(&kvm).unwrap();
754-
vm.memory_init(&guest_mem, false).unwrap();
754+
vm.memory_init(&guest_mem).unwrap();
755755

756756
let mem_clone = guest_mem.clone();
757757

src/vmm/src/vstate/vm.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,8 @@ impl Vm {
129129
}
130130

131131
/// Initializes the guest memory.
132-
pub fn memory_init(
133-
&self,
134-
guest_mem: &GuestMemoryMmap,
135-
track_dirty_pages: bool,
136-
) -> Result<(), VmError> {
137-
self.set_kvm_memory_regions(guest_mem, track_dirty_pages)?;
132+
pub fn memory_init(&self, guest_mem: &GuestMemoryMmap) -> Result<(), VmError> {
133+
self.set_kvm_memory_regions(guest_mem)?;
138134
#[cfg(target_arch = "x86_64")]
139135
self.fd
140136
.set_tss_address(u64_to_usize(crate::arch::x86_64::layout::KVM_TSS_ADDRESS))
@@ -146,16 +142,17 @@ impl Vm {
146142
pub(crate) fn set_kvm_memory_regions(
147143
&self,
148144
guest_mem: &GuestMemoryMmap,
149-
track_dirty_pages: bool,
150145
) -> Result<(), VmError> {
151-
let mut flags = 0u32;
152-
if track_dirty_pages {
153-
flags |= KVM_MEM_LOG_DIRTY_PAGES;
154-
}
155146
guest_mem
156147
.iter()
157148
.zip(0u32..)
158149
.try_for_each(|(region, slot)| {
150+
let flags = if region.bitmap().is_some() {
151+
KVM_MEM_LOG_DIRTY_PAGES
152+
} else {
153+
0
154+
};
155+
159156
let memory_region = kvm_userspace_memory_region {
160157
slot,
161158
guest_phys_addr: region.start_addr().raw_value(),
@@ -359,7 +356,7 @@ pub(crate) mod tests {
359356
pub(crate) fn setup_vm_with_memory(mem_size: usize) -> (Kvm, Vm, GuestMemoryMmap) {
360357
let (kvm, vm) = setup_vm();
361358
let gm = single_region_mem(mem_size);
362-
vm.memory_init(&gm, false).unwrap();
359+
vm.memory_init(&gm).unwrap();
363360
(kvm, vm, gm)
364361
}
365362

@@ -375,7 +372,7 @@ pub(crate) mod tests {
375372
let (_, vm) = setup_vm();
376373
// Create valid memory region and test that the initialization is successful.
377374
let gm = single_region_mem(0x1000);
378-
vm.memory_init(&gm, true).unwrap();
375+
vm.memory_init(&gm).unwrap();
379376
}
380377

381378
#[cfg(target_arch = "x86_64")]
@@ -452,13 +449,13 @@ pub(crate) mod tests {
452449
let (_, vm) = setup_vm();
453450

454451
let gm = single_region_mem(0x1000);
455-
let res = vm.set_kvm_memory_regions(&gm, false);
452+
let res = vm.set_kvm_memory_regions(&gm);
456453
res.unwrap();
457454

458455
// Trying to set a memory region with a size that is not a multiple of GUEST_PAGE_SIZE
459456
// will result in error.
460457
let gm = single_region_mem(0x10);
461-
let res = vm.set_kvm_memory_regions(&gm, false);
458+
let res = vm.set_kvm_memory_regions(&gm);
462459
assert_eq!(
463460
res.unwrap_err().to_string(),
464461
"Cannot set the memory regions: Invalid argument (os error 22)"

0 commit comments

Comments
 (0)