vmm: Support using an existing FD for memory

If this FD (wrapped in a File) is supplied when the RAM region is being
created use that over creating a new one.

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2022-01-12 10:12:05 +00:00
parent 271e17bd79
commit eeba1d3ad8

View File

@ -480,6 +480,7 @@ impl MemoryManager {
zone.hugepages, zone.hugepages,
zone.hugepage_size, zone.hugepage_size,
zone.host_numa_node, zone.host_numa_node,
None,
)?; )?;
// Add region to the list of regions associated with the // Add region to the list of regions associated with the
@ -555,6 +556,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,
)?; )?;
memory_regions.push(Arc::clone(&region)); memory_regions.push(Arc::clone(&region));
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) {
@ -939,6 +941,7 @@ impl MemoryManager {
zone.hugepages, zone.hugepages,
zone.hugepage_size, zone.hugepage_size,
zone.host_numa_node, zone.host_numa_node,
None,
)?; )?;
guest_memory = guest_memory guest_memory = guest_memory
@ -1227,9 +1230,13 @@ impl MemoryManager {
hugepages: bool, hugepages: bool,
hugepage_size: Option<u64>, hugepage_size: Option<u64>,
host_numa_node: Option<u32>, host_numa_node: Option<u32>,
existing_memory_file: Option<File>,
) -> Result<Arc<GuestRegionMmap>, Error> { ) -> Result<Arc<GuestRegionMmap>, Error> {
let (f, f_off) = let (f, f_off) = if let Some(f) = existing_memory_file {
Self::open_memory_file(backing_file, file_offset, size, hugepages, hugepage_size)?; (f, file_offset)
} else {
Self::open_memory_file(backing_file, file_offset, size, hugepages, hugepage_size)?
};
let mut mmap_flags = libc::MAP_NORESERVE let mut mmap_flags = libc::MAP_NORESERVE
| if shared { | if shared {
@ -1343,6 +1350,7 @@ impl MemoryManager {
self.hugepages, self.hugepages,
self.hugepage_size, self.hugepage_size,
None, None,
None,
)?; )?;
// Map it into the guest // Map it into the guest