pub struct GuestRegionMmap<B = ()> { /* private fields */ }backend-mmap only.Expand description
GuestMemoryRegion implementation that mmaps the guest’s
memory region in the current process.
Represents a continuous region of the guest’s physical memory that is backed by a mapping in the virtual address space of the calling process.
Implementations§
Source§impl<B: Bitmap> GuestRegionMmap<B>
impl<B: Bitmap> GuestRegionMmap<B>
Sourcepub fn new(mapping: MmapRegion<B>, guest_base: GuestAddress) -> Option<Self>
pub fn new(mapping: MmapRegion<B>, guest_base: GuestAddress) -> Option<Self>
Create a new memory-mapped memory region for the guest’s physical memory.
Returns None if guest_base + mapping.len() would overflow.
Sourcepub fn with_arc(
mapping: Arc<MmapRegion<B>>,
guest_base: GuestAddress,
) -> Option<Self>
pub fn with_arc( mapping: Arc<MmapRegion<B>>, guest_base: GuestAddress, ) -> Option<Self>
Same as Self::new(), but takes an Arc-wrapped mapping.
Sourcepub fn get_mmap(&self) -> Arc<MmapRegion<B>>
pub fn get_mmap(&self) -> Arc<MmapRegion<B>>
Return a clone of the inner Arc<MmapRegion> (as opposed to .deref(),
which bypasses the Arc).
The returned reference can be used to construct a new GuestRegionMmap with a different
base address (e.g. when switching between memory address spaces based on the guest physical
address vs. the VMM userspace virtual address).
Source§impl<B: NewBitmap> GuestRegionMmap<B>
impl<B: NewBitmap> GuestRegionMmap<B>
Sourcepub fn from_range(
addr: GuestAddress,
size: usize,
file: Option<FileOffset>,
) -> Result<Self, FromRangesError>
Available on crate feature xen only.
pub fn from_range( addr: GuestAddress, size: usize, file: Option<FileOffset>, ) -> Result<Self, FromRangesError>
xen only.Create a new Unix memory-mapped memory region from guest’s physical memory, size and file. This must only be used for tests, doctests, benches and is not designed for end consumers.
Methods from Deref<Target = MmapRegion<B>>§
Sourcepub fn as_ptr(&self) -> *mut u8
Available on crate feature xen and target_family=unix only.
pub fn as_ptr(&self) -> *mut u8
xen and target_family=unix only.Returns a pointer to the beginning of the memory region. Mutable accesses performed using the resulting pointer are not automatically accounted for by the dirty bitmap tracking functionality.
Should only be used for passing this region to ioctls for setting guest memory.
Sourcepub fn size(&self) -> usize
Available on crate feature xen and target_family=unix only.
pub fn size(&self) -> usize
xen and target_family=unix only.Returns the size of this region.
Sourcepub fn file_offset(&self) -> Option<&FileOffset>
Available on crate feature xen and target_family=unix only.
pub fn file_offset(&self) -> Option<&FileOffset>
xen and target_family=unix only.Returns information regarding the offset into the file backing this region (if any).
Sourcepub fn prot(&self) -> i32
Available on crate feature xen and target_family=unix only.
pub fn prot(&self) -> i32
xen and target_family=unix only.Returns the value of the prot parameter passed to mmap when mapping this region.
Sourcepub fn flags(&self) -> i32
Available on crate feature xen and target_family=unix only.
pub fn flags(&self) -> i32
xen and target_family=unix only.Returns the value of the flags parameter passed to mmap when mapping this region.
Sourcepub fn fds_overlap<T: Bitmap>(&self, other: &MmapRegion<T>) -> bool
Available on crate feature xen and target_family=unix only.
pub fn fds_overlap<T: Bitmap>(&self, other: &MmapRegion<T>) -> bool
xen and target_family=unix only.Checks whether this region and other are backed by overlapping
FileOffset objects.
This is mostly a sanity check available for convenience, as different file descriptors can alias the same file.
Sourcepub fn is_hugetlbfs(&self) -> Option<bool>
Available on crate feature xen and target_family=unix only.
pub fn is_hugetlbfs(&self) -> Option<bool>
xen and target_family=unix only.Returns true if the region is hugetlbfs
Sourcepub fn bitmap(&self) -> &B
Available on crate feature xen and target_family=unix only.
pub fn bitmap(&self) -> &B
xen and target_family=unix only.Returns a reference to the inner bitmap object.
Sourcepub fn xen_mmap_flags(&self) -> u32
Available on crate feature xen and target_family=unix only.
pub fn xen_mmap_flags(&self) -> u32
xen and target_family=unix only.Returns xen mmap flags.
Sourcepub fn xen_mmap_data(&self) -> u32
Available on crate feature xen and target_family=unix only.
pub fn xen_mmap_data(&self) -> u32
xen and target_family=unix only.Returns xen mmap data.
Trait Implementations§
Source§impl<B: Debug> Debug for GuestRegionMmap<B>
impl<B: Debug> Debug for GuestRegionMmap<B>
Source§impl<B> Deref for GuestRegionMmap<B>
impl<B> Deref for GuestRegionMmap<B>
Source§type Target = MmapRegion<B>
type Target = MmapRegion<B>
Source§fn deref(&self) -> &MmapRegion<B>
fn deref(&self) -> &MmapRegion<B>
Source§impl<B: Bitmap> GuestMemoryRegion for GuestRegionMmap<B>
impl<B: Bitmap> GuestMemoryRegion for GuestRegionMmap<B>
Source§fn len(&self) -> GuestUsize
fn len(&self) -> GuestUsize
Source§fn start_addr(&self) -> GuestAddress
fn start_addr(&self) -> GuestAddress
Source§fn get_host_address(&self, addr: MemoryRegionAddress) -> Result<*mut u8>
fn get_host_address(&self, addr: MemoryRegionAddress) -> Result<*mut u8>
Source§fn file_offset(&self) -> Option<&FileOffset>
fn file_offset(&self) -> Option<&FileOffset>
Source§fn get_slice(
&self,
offset: MemoryRegionAddress,
count: usize,
) -> Result<VolatileSlice<'_, BS<'_, B>>>
fn get_slice( &self, offset: MemoryRegionAddress, count: usize, ) -> Result<VolatileSlice<'_, BS<'_, B>>>
Source§fn is_hugetlbfs(&self) -> Option<bool>
fn is_hugetlbfs(&self) -> Option<bool>
HugeTLBFS.
Returns Some(true) if the region is backed by hugetlbfs.
None represents that no information is available. Read moreSource§fn last_addr(&self) -> GuestAddress
fn last_addr(&self) -> GuestAddress
Source§fn check_address(
&self,
addr: MemoryRegionAddress,
) -> Option<MemoryRegionAddress>
fn check_address( &self, addr: MemoryRegionAddress, ) -> Option<MemoryRegionAddress>
Source§fn address_in_range(&self, addr: MemoryRegionAddress) -> bool
fn address_in_range(&self, addr: MemoryRegionAddress) -> bool
true if the given address is within this region.Source§fn checked_offset(
&self,
base: MemoryRegionAddress,
offset: usize,
) -> Option<MemoryRegionAddress>
fn checked_offset( &self, base: MemoryRegionAddress, offset: usize, ) -> Option<MemoryRegionAddress>
Source§fn to_region_addr(&self, addr: GuestAddress) -> Option<MemoryRegionAddress>
fn to_region_addr(&self, addr: GuestAddress) -> Option<MemoryRegionAddress>
Source§fn as_volatile_slice(&self) -> Result<VolatileSlice<'_, BS<'_, Self::B>>>
fn as_volatile_slice(&self) -> Result<VolatileSlice<'_, BS<'_, Self::B>>>
impl<B: Bitmap> GuestMemoryRegionBytes for GuestRegionMmap<B>
Auto Trait Implementations§
impl<B> Freeze for GuestRegionMmap<B>
impl<B = ()> !RefUnwindSafe for GuestRegionMmap<B>
impl<B> Send for GuestRegionMmap<B>
impl<B> Sync for GuestRegionMmap<B>
impl<B> Unpin for GuestRegionMmap<B>
impl<B = ()> !UnwindSafe for GuestRegionMmap<B>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<R> Bytes<MemoryRegionAddress> for Rwhere
R: GuestMemoryRegionBytes,
impl<R> Bytes<MemoryRegionAddress> for Rwhere
R: GuestMemoryRegionBytes,
Source§fn write(&self, buf: &[u8], addr: MemoryRegionAddress) -> Result<usize, Error>
fn write(&self, buf: &[u8], addr: MemoryRegionAddress) -> Result<usize, Error>
§Examples
- Write a slice at guest address 0x1200.
let res = gm
.write(&[1, 2, 3, 4, 5], GuestAddress(0x1200))
.expect("Could not write to guest memory");
assert_eq!(5, res);Source§fn read(
&self,
buf: &mut [u8],
addr: MemoryRegionAddress,
) -> Result<usize, Error>
fn read( &self, buf: &mut [u8], addr: MemoryRegionAddress, ) -> Result<usize, Error>
§Examples
- Read a slice of length 16 at guestaddress 0x1200.
let buf = &mut [0u8; 16];
let res = gm
.read(buf, GuestAddress(0x1200))
.expect("Could not read from guest memory");
assert_eq!(16, res);Source§fn write_slice(
&self,
buf: &[u8],
addr: MemoryRegionAddress,
) -> Result<(), Error>
fn write_slice( &self, buf: &[u8], addr: MemoryRegionAddress, ) -> Result<(), Error>
addr. Read moreSource§fn read_slice(
&self,
buf: &mut [u8],
addr: MemoryRegionAddress,
) -> Result<(), Error>
fn read_slice( &self, buf: &mut [u8], addr: MemoryRegionAddress, ) -> Result<(), Error>
addr to fill an entire slice. Read moreSource§fn read_volatile_from<F>(
&self,
addr: MemoryRegionAddress,
src: &mut F,
count: usize,
) -> Result<usize, Error>where
F: ReadVolatile,
fn read_volatile_from<F>(
&self,
addr: MemoryRegionAddress,
src: &mut F,
count: usize,
) -> Result<usize, Error>where
F: ReadVolatile,
count bytes from src and writes them into the container at addr.
Unlike VolatileRead::read_volatile, this function retries on EINTR being returned from
the underlying I/O read operation. Read moreSource§fn read_exact_volatile_from<F>(
&self,
addr: MemoryRegionAddress,
src: &mut F,
count: usize,
) -> Result<(), Error>where
F: ReadVolatile,
fn read_exact_volatile_from<F>(
&self,
addr: MemoryRegionAddress,
src: &mut F,
count: usize,
) -> Result<(), Error>where
F: ReadVolatile,
Source§fn write_volatile_to<F>(
&self,
addr: MemoryRegionAddress,
dst: &mut F,
count: usize,
) -> Result<usize, Error>where
F: WriteVolatile,
fn write_volatile_to<F>(
&self,
addr: MemoryRegionAddress,
dst: &mut F,
count: usize,
) -> Result<usize, Error>where
F: WriteVolatile,
count bytes from the container at addr and writes them into dst.
Unlike VolatileWrite::write_volatile, this function retries on EINTR being returned by
the underlying I/O write operation. Read more