Skip to content

Commit 8bcfc56

Browse files
committed
refactor: stop using .zip(0u32..) to determine kvm slot indices
With multiple GuestMemoryMmaps around, this just doesnt work anymore. Signed-off-by: Patrick Roy <[email protected]>
1 parent ebb5f71 commit 8bcfc56

File tree

2 files changed

+14
-18
lines changed

2 files changed

+14
-18
lines changed

src/vmm/src/vstate/memory.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,8 @@ impl GuestMemoryExtension for GuestMemoryMmap {
333333
let mut writer_offset = 0;
334334
let page_size = get_page_size().map_err(MemoryError::PageSize)?;
335335

336-
let write_result = self.iter().zip(0..).try_for_each(|(region, slot)| {
337-
let kvm_bitmap = dirty_bitmap.get(&slot).unwrap();
336+
let write_result = self.iter().try_for_each(|region| {
337+
let kvm_bitmap = dirty_bitmap.get(&region.inner().slot).unwrap();
338338
let firecracker_bitmap = region.bitmap();
339339
let mut write_size = 0;
340340
let mut dirty_batch_start: u64 = 0;
@@ -397,8 +397,8 @@ impl GuestMemoryExtension for GuestMemoryMmap {
397397

398398
/// Stores the dirty bitmap inside into the internal bitmap
399399
fn store_dirty_bitmap(&self, dirty_bitmap: &DirtyBitmap, page_size: usize) {
400-
self.iter().zip(0..).for_each(|(region, slot)| {
401-
let kvm_bitmap = dirty_bitmap.get(&slot).unwrap();
400+
self.iter().for_each(|region| {
401+
let kvm_bitmap = dirty_bitmap.get(&region.inner().slot).unwrap();
402402
let firecracker_bitmap = region.bitmap();
403403

404404
for (i, v) in kvm_bitmap.iter().enumerate() {

src/vmm/src/vstate/vm.rs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -187,25 +187,21 @@ impl Vm {
187187

188188
/// Resets the KVM dirty bitmap for each of the guest's memory regions.
189189
pub fn reset_dirty_bitmap(&self) {
190-
self.guest_memory()
191-
.iter()
192-
.zip(0u32..)
193-
.for_each(|(region, slot)| {
194-
let _ = self.fd().get_dirty_log(slot, u64_to_usize(region.len()));
195-
});
190+
self.guest_memory().iter().for_each(|region| {
191+
let _ = self
192+
.fd()
193+
.get_dirty_log(region.inner().slot, u64_to_usize(region.len()));
194+
});
196195
}
197196

198197
/// Retrieves the KVM dirty bitmap for each of the guest's memory regions.
199198
pub fn get_dirty_bitmap(&self) -> Result<DirtyBitmap, vmm_sys_util::errno::Error> {
200199
let mut bitmap: DirtyBitmap = HashMap::new();
201-
self.guest_memory()
202-
.iter()
203-
.zip(0u32..)
204-
.try_for_each(|(region, slot)| {
205-
self.fd()
206-
.get_dirty_log(slot, u64_to_usize(region.len()))
207-
.map(|bitmap_region| _ = bitmap.insert(slot, bitmap_region))
208-
})?;
200+
self.guest_memory().iter().try_for_each(|region| {
201+
self.fd()
202+
.get_dirty_log(region.inner().slot, u64_to_usize(region.len()))
203+
.map(|bitmap_region| _ = bitmap.insert(region.inner().slot, bitmap_region))
204+
})?;
209205
Ok(bitmap)
210206
}
211207

0 commit comments

Comments
 (0)