mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-02 11:35:46 +00:00
vmm: Support using existing files for memory slots
Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
eeba1d3ad8
commit
b95e46565c
@ -532,6 +532,7 @@ impl MemoryManager {
|
|||||||
guest_ram_mappings: &[GuestRamMapping],
|
guest_ram_mappings: &[GuestRamMapping],
|
||||||
zones_config: &[MemoryZoneConfig],
|
zones_config: &[MemoryZoneConfig],
|
||||||
prefault: Option<bool>,
|
prefault: Option<bool>,
|
||||||
|
mut existing_memory_files: HashMap<u32, File>,
|
||||||
) -> Result<(Vec<Arc<GuestRegionMmap>>, MemoryZones), Error> {
|
) -> Result<(Vec<Arc<GuestRegionMmap>>, MemoryZones), Error> {
|
||||||
let mut memory_regions = Vec::new();
|
let mut memory_regions = Vec::new();
|
||||||
let mut memory_zones = HashMap::new();
|
let mut memory_zones = HashMap::new();
|
||||||
@ -556,7 +557,7 @@ impl MemoryManager {
|
|||||||
zone_config.hugepages,
|
zone_config.hugepages,
|
||||||
zone_config.hugepage_size,
|
zone_config.hugepage_size,
|
||||||
zone_config.host_numa_node,
|
zone_config.host_numa_node,
|
||||||
None,
|
existing_memory_files.remove(&guest_ram_mapping.slot),
|
||||||
)?;
|
)?;
|
||||||
memory_regions.push(Arc::clone(®ion));
|
memory_regions.push(Arc::clone(®ion));
|
||||||
if let Some(memory_zone) = memory_zones.get_mut(&guest_ram_mapping.zone_id) {
|
if let Some(memory_zone) = memory_zones.get_mut(&guest_ram_mapping.zone_id) {
|
||||||
@ -819,6 +820,7 @@ impl MemoryManager {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
vm: Arc<dyn hypervisor::Vm>,
|
vm: Arc<dyn hypervisor::Vm>,
|
||||||
config: &MemoryConfig,
|
config: &MemoryConfig,
|
||||||
@ -826,6 +828,7 @@ impl MemoryManager {
|
|||||||
phys_bits: u8,
|
phys_bits: u8,
|
||||||
#[cfg(feature = "tdx")] tdx_enabled: bool,
|
#[cfg(feature = "tdx")] tdx_enabled: bool,
|
||||||
restore_data: Option<&MemoryManagerSnapshotData>,
|
restore_data: Option<&MemoryManagerSnapshotData>,
|
||||||
|
existing_memory_files: Option<HashMap<u32, File>>,
|
||||||
#[cfg(target_arch = "x86_64")] sgx_epc_config: Option<Vec<SgxEpcConfig>>,
|
#[cfg(target_arch = "x86_64")] sgx_epc_config: Option<Vec<SgxEpcConfig>>,
|
||||||
) -> Result<Arc<Mutex<MemoryManager>>, Error> {
|
) -> Result<Arc<Mutex<MemoryManager>>, Error> {
|
||||||
let user_provided_zones = config.size == 0;
|
let user_provided_zones = config.size == 0;
|
||||||
@ -855,8 +858,12 @@ impl MemoryManager {
|
|||||||
selected_slot,
|
selected_slot,
|
||||||
next_hotplug_slot,
|
next_hotplug_slot,
|
||||||
) = if let Some(data) = restore_data {
|
) = if let Some(data) = restore_data {
|
||||||
let (regions, memory_zones) =
|
let (regions, memory_zones) = Self::restore_memory_regions_and_zones(
|
||||||
Self::restore_memory_regions_and_zones(&data.guest_ram_mappings, &zones, prefault)?;
|
&data.guest_ram_mappings,
|
||||||
|
&zones,
|
||||||
|
prefault,
|
||||||
|
existing_memory_files.unwrap_or_default(),
|
||||||
|
)?;
|
||||||
let guest_memory =
|
let guest_memory =
|
||||||
GuestMemoryMmap::from_arc_regions(regions).map_err(Error::GuestMemory)?;
|
GuestMemoryMmap::from_arc_regions(regions).map_err(Error::GuestMemory)?;
|
||||||
let boot_guest_memory = guest_memory.clone();
|
let boot_guest_memory = guest_memory.clone();
|
||||||
@ -1096,6 +1103,7 @@ impl MemoryManager {
|
|||||||
#[cfg(feature = "tdx")]
|
#[cfg(feature = "tdx")]
|
||||||
false,
|
false,
|
||||||
Some(&mem_snapshot),
|
Some(&mem_snapshot),
|
||||||
|
None,
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
None,
|
None,
|
||||||
)?;
|
)?;
|
||||||
|
@ -777,6 +777,7 @@ impl Vm {
|
|||||||
#[cfg(feature = "tdx")]
|
#[cfg(feature = "tdx")]
|
||||||
tdx_enabled,
|
tdx_enabled,
|
||||||
None,
|
None,
|
||||||
|
None,
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
sgx_epc_config,
|
sgx_epc_config,
|
||||||
)
|
)
|
||||||
@ -896,6 +897,7 @@ impl Vm {
|
|||||||
#[cfg(feature = "tdx")]
|
#[cfg(feature = "tdx")]
|
||||||
false,
|
false,
|
||||||
Some(memory_manager_data),
|
Some(memory_manager_data),
|
||||||
|
None,
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user