pub struct KvmMemory { /* private fields */ }Expand description
Guest memory implementation for Linux KVM.
This manages the guest physical address space using mmap’d memory that is registered with KVM via KVM_SET_USER_MEMORY_REGION.
Implementations§
Source§impl KvmMemory
impl KvmMemory
Sourcepub fn new(size: u64) -> Result<Self, HypervisorError>
pub fn new(size: u64) -> Result<Self, HypervisorError>
Sourcepub fn host_address(&self) -> *mut u8
pub fn host_address(&self) -> *mut u8
Returns the host address of the base memory region.
This is used when registering memory with KVM.
Sourcepub fn add_region(
&self,
guest_addr: GuestAddress,
size: u64,
) -> Result<*mut u8, HypervisorError>
pub fn add_region( &self, guest_addr: GuestAddress, size: u64, ) -> Result<*mut u8, HypervisorError>
Adds an additional memory region.
§Errors
Returns an error if the region overlaps with existing regions or memory allocation fails.
Sourcepub unsafe fn add_external_region(
&self,
guest_addr: GuestAddress,
host_addr: *mut u8,
size: u64,
read_only: bool,
) -> Result<(), HypervisorError>
pub unsafe fn add_external_region( &self, guest_addr: GuestAddress, host_addr: *mut u8, size: u64, read_only: bool, ) -> Result<(), HypervisorError>
Adds an externally allocated memory region.
The caller is responsible for ensuring the memory remains valid for the lifetime of this object.
§Safety
The host_addr must point to valid memory of at least size bytes
that will remain valid for the lifetime of this KvmMemory.
Sourcepub fn attach_vm_fd(&self, vm_fd: RawFd)
pub fn attach_vm_fd(&self, vm_fd: RawFd)
Attaches the KVM VM fd for dirty logging.
Sourcepub fn register_slot(
&self,
slot: u32,
guest_phys_addr: u64,
size: u64,
userspace_addr: u64,
flags: u32,
) -> Result<(), HypervisorError>
pub fn register_slot( &self, slot: u32, guest_phys_addr: u64, size: u64, userspace_addr: u64, flags: u32, ) -> Result<(), HypervisorError>
Registers a memory slot for dirty logging.
§Errors
Returns an error if the slot list cannot be updated.
Sourcepub fn unregister_slot(&self, slot: u32) -> Result<(), HypervisorError>
pub fn unregister_slot(&self, slot: u32) -> Result<(), HypervisorError>
Sourcepub fn set_dirty_tracking_enabled(&self, enabled: bool)
pub fn set_dirty_tracking_enabled(&self, enabled: bool)
Updates the dirty tracking enabled flag from external callers.
Sourcepub fn regions(&self) -> Result<Vec<MemoryRegion>, HypervisorError>
pub fn regions(&self) -> Result<Vec<MemoryRegion>, HypervisorError>
Returns an iterator over all memory regions.
Sourcepub fn write_obj<T: Copy>(
&self,
addr: GuestAddress,
val: &T,
) -> Result<(), HypervisorError>
pub fn write_obj<T: Copy>( &self, addr: GuestAddress, val: &T, ) -> Result<(), HypervisorError>
Writes a value to guest memory at the specified address.
Sourcepub fn read_obj<T: Copy + Default>(
&self,
addr: GuestAddress,
) -> Result<T, HypervisorError>
pub fn read_obj<T: Copy + Default>( &self, addr: GuestAddress, ) -> Result<T, HypervisorError>
Reads a value from guest memory at the specified address.
Sourcepub fn memset(
&self,
addr: GuestAddress,
val: u8,
len: usize,
) -> Result<(), HypervisorError>
pub fn memset( &self, addr: GuestAddress, val: u8, len: usize, ) -> Result<(), HypervisorError>
Fills a range of guest memory with a byte value.