vmm: memory_manager: Simplification to avoid unnecessary locking

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf 2021-09-22 11:44:51 +02:00 committed by Bo Chen
parent 4889999277
commit 74485924b1

View File

@ -759,7 +759,7 @@ impl MemoryManager {
#[cfg(feature = "tdx")] #[cfg(feature = "tdx")]
let log_dirty = !tdx_enabled; // Cannot log dirty pages on a TD let log_dirty = !tdx_enabled; // Cannot log dirty pages on a TD
let memory_manager = Arc::new(Mutex::new(MemoryManager { let mut memory_manager = MemoryManager {
boot_guest_memory, boot_guest_memory,
guest_memory: guest_memory.clone(), guest_memory: guest_memory.clone(),
next_memory_slot: 0, next_memory_slot: 0,
@ -787,11 +787,10 @@ impl MemoryManager {
#[cfg(feature = "acpi")] #[cfg(feature = "acpi")]
acpi_address, acpi_address,
log_dirty, log_dirty,
})); };
for region in guest_memory.memory().iter() { for region in guest_memory.memory().iter() {
let mut mm = memory_manager.lock().unwrap(); let slot = memory_manager.create_userspace_mapping(
let slot = mm.create_userspace_mapping(
region.start_addr().raw_value(), region.start_addr().raw_value(),
region.len() as u64, region.len() as u64,
region.as_ptr() as u64, region.as_ptr() as u64,
@ -799,7 +798,7 @@ impl MemoryManager {
false, false,
log_dirty, log_dirty,
)?; )?;
mm.guest_ram_mappings.push(GuestRamMapping { memory_manager.guest_ram_mappings.push(GuestRamMapping {
gpa: region.start_addr().raw_value(), gpa: region.start_addr().raw_value(),
size: region.len(), size: region.len(),
slot, slot,
@ -807,8 +806,7 @@ impl MemoryManager {
} }
for region in virtio_mem_regions.drain(..) { for region in virtio_mem_regions.drain(..) {
let mut mm = memory_manager.lock().unwrap(); let slot = memory_manager.create_userspace_mapping(
let slot = mm.create_userspace_mapping(
region.start_addr().raw_value(), region.start_addr().raw_value(),
region.len() as u64, region.len() as u64,
region.as_ptr() as u64, region.as_ptr() as u64,
@ -817,7 +815,7 @@ impl MemoryManager {
log_dirty, log_dirty,
)?; )?;
mm.guest_ram_mappings.push(GuestRamMapping { memory_manager.guest_ram_mappings.push(GuestRamMapping {
gpa: region.start_addr().raw_value(), gpa: region.start_addr().raw_value(),
size: region.len(), size: region.len(),
slot, slot,
@ -827,7 +825,7 @@ impl MemoryManager {
.unwrap() .unwrap()
.allocate_mmio_addresses(Some(region.start_addr()), region.len(), None) .allocate_mmio_addresses(Some(region.start_addr()), region.len(), None)
.ok_or(Error::MemoryRangeAllocation)?; .ok_or(Error::MemoryRangeAllocation)?;
mm.add_region(region)?; memory_manager.add_region(region)?;
} }
// Allocate RAM and Reserved address ranges. // Allocate RAM and Reserved address ranges.
@ -839,7 +837,7 @@ impl MemoryManager {
.ok_or(Error::MemoryRangeAllocation)?; .ok_or(Error::MemoryRangeAllocation)?;
} }
Ok(memory_manager) Ok(Arc::new(Mutex::new(memory_manager)))
} }
pub fn new_from_snapshot( pub fn new_from_snapshot(