Struct Cr3
pub struct Cr3;Expand description
Contains the physical address of the highest-level page table.
Implementations§
§impl Cr3
impl Cr3
pub fn read_pcid() -> (PhysFrame, Pcid)
pub fn read_pcid() -> (PhysFrame, Pcid)
Read the current P4 table address from the CR3 register along with PCID.
The correct functioning of this requires CR4.PCIDE = 1.
See Cr4Flags::PCID
pub unsafe fn write(frame: PhysFrame, flags: Cr3Flags)
pub unsafe fn write(frame: PhysFrame, flags: Cr3Flags)
Write a new P4 table address into the CR3 register.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by changing the page mapping.
pub unsafe fn write_pcid(frame: PhysFrame, pcid: Pcid)
pub unsafe fn write_pcid(frame: PhysFrame, pcid: Pcid)
Write a new P4 table address into the CR3 register.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by
changing the page mapping.
Cr4Flags::PCID must be set before calling this method.
pub unsafe fn write_pcid_no_flush(frame: PhysFrame, pcid: Pcid)
pub unsafe fn write_pcid_no_flush(frame: PhysFrame, pcid: Pcid)
Write a new P4 table address into the CR3 register without flushing existing TLB entries for the PCID.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by
changing the page mapping.
Cr4Flags::PCID must be set before calling this method.
pub unsafe fn write_raw(frame: PhysFrame, val: u16)
pub unsafe fn write_raw(frame: PhysFrame, val: u16)
Write a new P4 table address into the CR3 register.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by changing the page mapping.
pub unsafe fn update<F>(f: F)
pub unsafe fn update<F>(f: F)
Update the P4 table address in the CR3 register.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by changing the page mapping.
pub unsafe fn update_pcid<F>(f: F)
pub unsafe fn update_pcid<F>(f: F)
Updates the P4 table address in the CR3 register.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by
changing the page mapping.
Cr4Flags::PCID must be set before calling this method.
pub unsafe fn update_pcid_no_flush<F>(f: F)
pub unsafe fn update_pcid_no_flush<F>(f: F)
Updates the P4 table address in the CR3 register without flushing existing TLB entries for the PCID.
§Safety
Changing the level 4 page table is unsafe, because it’s possible to violate memory safety by
changing the page mapping.
Cr4Flags::PCID must be set before calling this method.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Cr3
impl RefUnwindSafe for Cr3
impl Send for Cr3
impl Sync for Cr3
impl Unpin for Cr3
impl UnsafeUnpin for Cr3
impl UnwindSafe for Cr3
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more