Page

Struct Page 

Source
pub struct Page {
    inner: ContigPages,
}
Expand description

A representation of a memory page.

The Page struct encapsulates a single memory page, providing methods to allocate, access, and manipulate the underlying page’s contents.

This page internally holds the reference counts. This counter increases on a calling of Page::clone, and decreases when the page instance is dropped.

§Example:

let page = Page::new().unwrap();
let va = page.va();  // Get the virtual address of the page.
let pa = page.pa();  // Get the physical address of the page.

Fields§

§inner: ContigPages

Implementations§

Source§

impl Page

Source

pub fn new() -> Self

Allocate a new page.

This function allocates a new memory page.

Source

pub fn kva(&self) -> Kva

Get the kernel virtual address of this page.

§Returns
  • The kernel virtual address (Kva) of the page.
Source

pub fn pa(&self) -> Pa

Get the physical address of this page.

§Returns
  • The physical address (Pa) of the page.
Source

pub fn into_raw(self) -> Pa

Consumes the page, returning its physical address.

This method “consumes” the Page and returns its physical address. After calling this function, the caller is responsible for managing the memory previously associated with the page. It is important to properly release the page, which can be done using Page::from_pa.

§Returns
  • The physical address (Pa) of the page.
Source

pub unsafe fn from_pa(pa: Pa) -> Self

Constructs a page from a given physical address.

This method reconstructs a Page from a physical address (Pa). It should be used only after consuming a Page with Page::into_raw. The physical address passed must be valid.

§Safety
  • This function is unsafe because incorrect usage could result in memory issues such as a double-free.
  • Ensure that the physical address passed is valid and is being used correctly.
§Arguments
  • pa: The physical address of the page.
§Returns
  • A Page reconstructed from the physical address.
Source

pub fn inner(&self) -> &[u8]

Get a reference to the underlying slice of the page (read-only).

This method allows access to the contents of the page as a byte slice. The caller can read from the page’s memory, but cannot modify it.

§Returns
  • A reference to the byte slice representing the contents of the page.
Source

pub fn inner_mut(&mut self) -> &mut [u8]

Get a mutable reference to the underlying slice of the page.

This method allows modification of the contents of the page as a byte slice. The caller can read from and write to the page’s memory.

§Returns
  • A mutable reference to the byte slice representing the contents of the page.

Trait Implementations§

Source§

impl Clone for Page

Source§

fn clone(&self) -> Page

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for Page

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Drop for Page

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl Freeze for Page

§

impl RefUnwindSafe for Page

§

impl Send for Page

§

impl Sync for Page

§

impl Unpin for Page

§

impl UnwindSafe for Page

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.