virtio-devices, vmm: Deprecate "GuestMemory::with_regions(_mut)"

Function "GuestMemory::with_regions(_mut)" were mainly temporary methods
to access the regions in `GuestMemory` as the lack of iterator-based
access, and hence they are deprecated in the upstream vm-memory crate [1].

[1] https://github.com/rust-vmm/vm-memory/issues/133

Signed-off-by: Bo Chen <chen.bo@intel.com>
This commit is contained in:
Bo Chen
2021-05-24 12:23:25 -07:00
committed by Rob Bradford
parent 0e0159db0c
commit 2c4fa258a6
3 changed files with 12 additions and 20 deletions

View File

@@ -27,10 +27,10 @@ pub struct VhostUserConfig {
pub fn update_mem_table(vu: &mut Master, mem: &GuestMemoryMmap) -> Result<()> { pub fn update_mem_table(vu: &mut Master, mem: &GuestMemoryMmap) -> Result<()> {
let mut regions: Vec<VhostUserMemoryRegionInfo> = Vec::new(); let mut regions: Vec<VhostUserMemoryRegionInfo> = Vec::new();
mem.with_regions_mut(|_, region| { for region in mem.iter() {
let (mmap_handle, mmap_offset) = match region.file_offset() { let (mmap_handle, mmap_offset) = match region.file_offset() {
Some(_file_offset) => (_file_offset.file().as_raw_fd(), _file_offset.start()), Some(_file_offset) => (_file_offset.file().as_raw_fd(), _file_offset.start()),
None => return Err(MmapError::NoMemoryRegion), None => return Err(Error::VhostUserMemoryRegion(MmapError::NoMemoryRegion)),
}; };
let vhost_user_net_reg = VhostUserMemoryRegionInfo { let vhost_user_net_reg = VhostUserMemoryRegionInfo {
@@ -42,10 +42,7 @@ pub fn update_mem_table(vu: &mut Master, mem: &GuestMemoryMmap) -> Result<()> {
}; };
regions.push(vhost_user_net_reg); regions.push(vhost_user_net_reg);
}
Ok(())
})
.map_err(Error::VhostUserMemoryRegion)?;
vu.set_mem_table(regions.as_slice()) vu.set_mem_table(regions.as_slice())
.map_err(Error::VhostUserSetMemTable)?; .map_err(Error::VhostUserSetMemTable)?;

View File

@@ -773,7 +773,7 @@ impl MemoryManager {
log_dirty, log_dirty,
})); }));
guest_memory.memory().with_regions(|_, region| { for region in guest_memory.memory().iter() {
let mut mm = memory_manager.lock().unwrap(); let mut mm = memory_manager.lock().unwrap();
let slot = mm.create_userspace_mapping( let slot = mm.create_userspace_mapping(
region.start_addr().raw_value(), region.start_addr().raw_value(),
@@ -788,9 +788,7 @@ impl MemoryManager {
size: region.len(), size: region.len(),
slot, slot,
}); });
}
Ok(())
})?;
for region in virtio_mem_regions.drain(..) { for region in virtio_mem_regions.drain(..) {
let mut mm = memory_manager.lock().unwrap(); let mut mm = memory_manager.lock().unwrap();
@@ -1942,7 +1940,7 @@ impl Snapshottable for MemoryManager {
let mut memory_regions: Vec<MemoryRegion> = Vec::new(); let mut memory_regions: Vec<MemoryRegion> = Vec::new();
guest_memory.with_regions_mut(|index, region| { for (index, region) in guest_memory.iter().enumerate() {
if region.len() == 0 { if region.len() == 0 {
return Err(MigratableError::Snapshot(anyhow!("Zero length region"))); return Err(MigratableError::Snapshot(anyhow!("Zero length region")));
} }
@@ -1970,9 +1968,7 @@ impl Snapshottable for MemoryManager {
start_addr: region.start_addr().0, start_addr: region.start_addr().0,
size: region.len(), size: region.len(),
}); });
}
Ok(())
})?;
// Store locally this list of regions as it will be used through the // Store locally this list of regions as it will be used through the
// Transportable::send() implementation. The point is to avoid the // Transportable::send() implementation. The point is to avoid the

View File

@@ -2019,13 +2019,12 @@ impl Vm {
let mut table = MemoryRangeTable::default(); let mut table = MemoryRangeTable::default();
let guest_memory = self.memory_manager.lock().as_ref().unwrap().guest_memory(); let guest_memory = self.memory_manager.lock().as_ref().unwrap().guest_memory();
guest_memory.memory().with_regions_mut(|_, region| { for region in guest_memory.memory().iter() {
table.push(MemoryRange { table.push(MemoryRange {
gpa: region.start_addr().raw_value(), gpa: region.start_addr().raw_value(),
length: region.len() as u64, length: region.len() as u64,
}); });
Ok(()) }
})?;
Ok(table) Ok(table)
} }
@@ -2520,7 +2519,7 @@ pub fn test_vm() {
let hv = hypervisor::new().unwrap(); let hv = hypervisor::new().unwrap();
let vm = hv.create_vm().expect("new VM creation failed"); let vm = hv.create_vm().expect("new VM creation failed");
mem.with_regions(|index, region| { for (index, region) in mem.iter().enumerate() {
let mem_region = vm.make_user_memory_region( let mem_region = vm.make_user_memory_region(
index as u32, index as u32,
region.start_addr().raw_value(), region.start_addr().raw_value(),
@@ -2531,8 +2530,8 @@ pub fn test_vm() {
); );
vm.set_user_memory_region(mem_region) vm.set_user_memory_region(mem_region)
}) .expect("Cannot configure guest memory");
.expect("Cannot configure guest memory"); }
mem.write_slice(&code, load_addr) mem.write_slice(&code, load_addr)
.expect("Writing code to memory failed"); .expect("Writing code to memory failed");