MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / add_ram_region

Method add_ram_region

vmm/src/memory_manager.rs:2158–2204  ·  view source on GitHub ↗
(
        &mut self,
        start_addr: GuestAddress,
        size: usize,
    )

Source from the content-addressed store, hash-verified

2156 }
2157
2158 pub fn add_ram_region(
2159 &mut self,
2160 start_addr: GuestAddress,
2161 size: usize,
2162 ) -> Result<Arc<GuestRegionMmap>, Error> {
2163 // Allocate memory for the region
2164 let region = MemoryManager::create_ram_region(
2165 &None,
2166 0,
2167 start_addr,
2168 size,
2169 self.prefault,
2170 self.shared,
2171 self.hugepages,
2172 self.hugepage_size,
2173 None,
2174 None,
2175 self.thp,
2176 )?;
2177
2178 // Map it into the guest
2179 // SAFETY: guaranteed by GuestMmapRegion invariants
2180 let slot = unsafe {
2181 self.create_userspace_mapping(
2182 region.start_addr().0,
2183 region.len().try_into().unwrap(),
2184 region.as_ptr(),
2185 self.memory_zones
2186 .get(DEFAULT_MEMORY_ZONE)
2187 .map_or(self.mergeable, |z| z.mergeable),
2188 false,
2189 self.log_dirty,
2190 )
2191 }?;
2192 self.guest_ram_mappings.push(GuestRamMapping {
2193 gpa: region.start_addr().raw_value(),
2194 size: region.len(),
2195 slot,
2196 zone_id: DEFAULT_MEMORY_ZONE.to_string(),
2197 virtio_mem: false,
2198 file_offset: 0,
2199 });
2200
2201 self.add_region(Arc::clone(&region))?;
2202
2203 Ok(region)
2204 }
2205
2206 fn hotplug_ram_region(&mut self, size: usize) -> Result<Arc<GuestRegionMmap>, Error> {
2207 info!("Hotplugging new RAM: {size}");

Callers 3

hotplug_ram_regionMethod · 0.80
populate_tdx_sectionsMethod · 0.80

Calls 7

start_addrMethod · 0.80
try_intoMethod · 0.80
add_regionMethod · 0.80
lenMethod · 0.45
getMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected