[][src]Struct x86_64::structures::paging::mapper::RecursivePageTable

pub struct RecursivePageTable<'a> { /* fields omitted */ }

A recursive page table is a last level page table with an entry mapped to the table itself.

This recursive mapping allows accessing all page tables in the hierarchy:

  • To access the level 4 page table, we “loop“ (i.e. follow the recursively mapped entry) four times.
  • To access a level 3 page table, we “loop” three times and then use the level 4 index.
  • To access a level 2 page table, we “loop” two times, then use the level 4 index, then the level 3 index.
  • To access a level 1 page table, we “loop” once, then use the level 4 index, then the level 3 index, then the level 2 index.

This struct implements the Mapper trait.

The page table flags PRESENT and WRITABLE are always set for higher level page table entries, even if not specified, because the design of the recursive page table requires it.

Implementations

impl<'a> RecursivePageTable<'a>[src]

pub fn new(table: &'a mut PageTable) -> Result<Self, ()>[src]

Creates a new RecursivePageTable from the passed level 4 PageTable.

The page table must be recursively mapped, that means:

  • The page table must have one recursive entry, i.e. an entry that points to the table itself.
    • The reference must use that “loop”, i.e. be of the form 0o_xxx_xxx_xxx_xxx_0000 where xxx is the recursive entry.
  • The page table must be active, i.e. the CR3 register must contain its physical address.

Otherwise Err(()) is returned.

pub unsafe fn new_unchecked(
    table: &'a mut PageTable,
    recursive_index: PageTableIndex
) -> Self
[src]

Creates a new RecursivePageTable without performing any checks.

Safety

The given page table must be a level 4 page table that is active in the CPU (i.e. loaded in the CR3 register). The recursive_index parameter must be the index of the recursively mapped entry of that page table.

Trait Implementations

impl<'a> Debug for RecursivePageTable<'a>[src]

impl<'a> Mapper<Size1GiB> for RecursivePageTable<'a>[src]

impl<'a> Mapper<Size2MiB> for RecursivePageTable<'a>[src]

impl<'a> Mapper<Size4KiB> for RecursivePageTable<'a>[src]

impl<'a> MapperAllSizes for RecursivePageTable<'a>[src]

Auto Trait Implementations

impl<'a> Send for RecursivePageTable<'a>

impl<'a> Sync for RecursivePageTable<'a>

impl<'a> Unpin for RecursivePageTable<'a>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.