Struct MappedPageTable
pub struct MappedPageTable<'a, P>where
P: PageTableFrameMapping,{
page_table_walker: PageTableWalker<P>,
level_4_table: &'a mut PageTable,
}Expand description
A Mapper implementation that relies on a PhysAddr to VirtAddr conversion function.
This type requires that the all physical page table frames are mapped to some virtual
address. Normally, this is done by mapping the complete physical address space into
the virtual address space at some offset. Other mappings between physical and virtual
memory are possible too, as long as they can be calculated as an PhysAddr to
VirtAddr closure.
Fields§
§page_table_walker: PageTableWalker<P>§level_4_table: &'a mut PageTableImplementations§
§impl<'a, P> MappedPageTable<'a, P>where
P: PageTableFrameMapping,
impl<'a, P> MappedPageTable<'a, P>where
P: PageTableFrameMapping,
pub unsafe fn new(
level_4_table: &'a mut PageTable,
page_table_frame_mapping: P,
) -> MappedPageTable<'a, P>
pub unsafe fn new( level_4_table: &'a mut PageTable, page_table_frame_mapping: P, ) -> MappedPageTable<'a, P>
Creates a new MappedPageTable that uses the passed PageTableFrameMapping for converting virtual
to physical addresses.
§Safety
This function is unsafe because the caller must guarantee that the passed page_table_frame_mapping
PageTableFrameMapping is correct. Also, the passed level_4_table must point to the level 4 page table
of a valid page table hierarchy. Otherwise this function might break memory safety, e.g.
by writing to an illegal memory location.
pub fn level_4_table(&self) -> &PageTable
pub fn level_4_table(&self) -> &PageTable
Returns an immutable reference to the wrapped level 4 PageTable instance.
pub fn level_4_table_mut(&mut self) -> &mut PageTable
pub fn level_4_table_mut(&mut self) -> &mut PageTable
Returns a mutable reference to the wrapped level 4 PageTable instance.
pub fn page_table_frame_mapping(&self) -> &P
pub fn page_table_frame_mapping(&self) -> &P
Returns the PageTableFrameMapping used for converting virtual to physical addresses.
Trait Implementations§
§impl<P> CleanUp for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
impl<P> CleanUp for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
§unsafe fn clean_up<D>(&mut self, frame_deallocator: &mut D)where
D: FrameDeallocator<Size4KiB>,
unsafe fn clean_up<D>(&mut self, frame_deallocator: &mut D)where
D: FrameDeallocator<Size4KiB>,
§unsafe fn clean_up_addr_range<D>(
&mut self,
range: PageRangeInclusive,
frame_deallocator: &mut D,
)where
D: FrameDeallocator<Size4KiB>,
unsafe fn clean_up_addr_range<D>(
&mut self,
range: PageRangeInclusive,
frame_deallocator: &mut D,
)where
D: FrameDeallocator<Size4KiB>,
§impl<'a, P> Debug for MappedPageTable<'a, P>where
P: Debug + PageTableFrameMapping,
impl<'a, P> Debug for MappedPageTable<'a, P>where
P: Debug + PageTableFrameMapping,
§impl<P> Mapper<Size1GiB> for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
impl<P> Mapper<Size1GiB> for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
§unsafe fn map_to_with_table_flags<A>(
&mut self,
page: Page<Size1GiB>,
frame: PhysFrame<Size1GiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A,
) -> Result<MapperFlush<Size1GiB>, MapToError<Size1GiB>>
unsafe fn map_to_with_table_flags<A>( &mut self, page: Page<Size1GiB>, frame: PhysFrame<Size1GiB>, flags: PageTableFlags, parent_table_flags: PageTableFlags, allocator: &mut A, ) -> Result<MapperFlush<Size1GiB>, MapToError<Size1GiB>>
§fn unmap(
&mut self,
page: Page<Size1GiB>,
) -> Result<(PhysFrame<Size1GiB>, MapperFlush<Size1GiB>), UnmapError>
fn unmap( &mut self, page: Page<Size1GiB>, ) -> Result<(PhysFrame<Size1GiB>, MapperFlush<Size1GiB>), UnmapError>
§unsafe fn update_flags(
&mut self,
page: Page<Size1GiB>,
flags: PageTableFlags,
) -> Result<MapperFlush<Size1GiB>, FlagUpdateError>
unsafe fn update_flags( &mut self, page: Page<Size1GiB>, flags: PageTableFlags, ) -> Result<MapperFlush<Size1GiB>, FlagUpdateError>
§unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size1GiB>,
flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p4_entry( &mut self, page: Page<Size1GiB>, flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§unsafe fn set_flags_p3_entry(
&mut self,
_page: Page<Size1GiB>,
_flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p3_entry( &mut self, _page: Page<Size1GiB>, _flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§unsafe fn set_flags_p2_entry(
&mut self,
_page: Page<Size1GiB>,
_flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p2_entry( &mut self, _page: Page<Size1GiB>, _flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§fn translate_page(
&self,
page: Page<Size1GiB>,
) -> Result<PhysFrame<Size1GiB>, TranslateError>
fn translate_page( &self, page: Page<Size1GiB>, ) -> Result<PhysFrame<Size1GiB>, TranslateError>
§unsafe fn map_to<A>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A,
) -> Result<MapperFlush<S>, MapToError<S>>
unsafe fn map_to<A>( &mut self, page: Page<S>, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A, ) -> Result<MapperFlush<S>, MapToError<S>>
§unsafe fn identity_map<A>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A,
) -> Result<MapperFlush<S>, MapToError<S>>
unsafe fn identity_map<A>( &mut self, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A, ) -> Result<MapperFlush<S>, MapToError<S>>
§impl<P> Mapper<Size2MiB> for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
impl<P> Mapper<Size2MiB> for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
§unsafe fn map_to_with_table_flags<A>(
&mut self,
page: Page<Size2MiB>,
frame: PhysFrame<Size2MiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A,
) -> Result<MapperFlush<Size2MiB>, MapToError<Size2MiB>>
unsafe fn map_to_with_table_flags<A>( &mut self, page: Page<Size2MiB>, frame: PhysFrame<Size2MiB>, flags: PageTableFlags, parent_table_flags: PageTableFlags, allocator: &mut A, ) -> Result<MapperFlush<Size2MiB>, MapToError<Size2MiB>>
§fn unmap(
&mut self,
page: Page<Size2MiB>,
) -> Result<(PhysFrame<Size2MiB>, MapperFlush<Size2MiB>), UnmapError>
fn unmap( &mut self, page: Page<Size2MiB>, ) -> Result<(PhysFrame<Size2MiB>, MapperFlush<Size2MiB>), UnmapError>
§unsafe fn update_flags(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags,
) -> Result<MapperFlush<Size2MiB>, FlagUpdateError>
unsafe fn update_flags( &mut self, page: Page<Size2MiB>, flags: PageTableFlags, ) -> Result<MapperFlush<Size2MiB>, FlagUpdateError>
§unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p4_entry( &mut self, page: Page<Size2MiB>, flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§unsafe fn set_flags_p3_entry(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p3_entry( &mut self, page: Page<Size2MiB>, flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§unsafe fn set_flags_p2_entry(
&mut self,
_page: Page<Size2MiB>,
_flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p2_entry( &mut self, _page: Page<Size2MiB>, _flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§fn translate_page(
&self,
page: Page<Size2MiB>,
) -> Result<PhysFrame<Size2MiB>, TranslateError>
fn translate_page( &self, page: Page<Size2MiB>, ) -> Result<PhysFrame<Size2MiB>, TranslateError>
§unsafe fn map_to<A>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A,
) -> Result<MapperFlush<S>, MapToError<S>>
unsafe fn map_to<A>( &mut self, page: Page<S>, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A, ) -> Result<MapperFlush<S>, MapToError<S>>
§unsafe fn identity_map<A>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A,
) -> Result<MapperFlush<S>, MapToError<S>>
unsafe fn identity_map<A>( &mut self, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A, ) -> Result<MapperFlush<S>, MapToError<S>>
§impl<P> Mapper<Size4KiB> for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
impl<P> Mapper<Size4KiB> for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
§unsafe fn map_to_with_table_flags<A>(
&mut self,
page: Page,
frame: PhysFrame,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A,
) -> Result<MapperFlush<Size4KiB>, MapToError<Size4KiB>>
unsafe fn map_to_with_table_flags<A>( &mut self, page: Page, frame: PhysFrame, flags: PageTableFlags, parent_table_flags: PageTableFlags, allocator: &mut A, ) -> Result<MapperFlush<Size4KiB>, MapToError<Size4KiB>>
§fn unmap(
&mut self,
page: Page,
) -> Result<(PhysFrame, MapperFlush<Size4KiB>), UnmapError>
fn unmap( &mut self, page: Page, ) -> Result<(PhysFrame, MapperFlush<Size4KiB>), UnmapError>
§unsafe fn update_flags(
&mut self,
page: Page,
flags: PageTableFlags,
) -> Result<MapperFlush<Size4KiB>, FlagUpdateError>
unsafe fn update_flags( &mut self, page: Page, flags: PageTableFlags, ) -> Result<MapperFlush<Size4KiB>, FlagUpdateError>
§unsafe fn set_flags_p4_entry(
&mut self,
page: Page,
flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p4_entry( &mut self, page: Page, flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§unsafe fn set_flags_p3_entry(
&mut self,
page: Page,
flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p3_entry( &mut self, page: Page, flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§unsafe fn set_flags_p2_entry(
&mut self,
page: Page,
flags: PageTableFlags,
) -> Result<MapperFlushAll, FlagUpdateError>
unsafe fn set_flags_p2_entry( &mut self, page: Page, flags: PageTableFlags, ) -> Result<MapperFlushAll, FlagUpdateError>
§fn translate_page(&self, page: Page) -> Result<PhysFrame, TranslateError>
fn translate_page(&self, page: Page) -> Result<PhysFrame, TranslateError>
§unsafe fn map_to<A>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A,
) -> Result<MapperFlush<S>, MapToError<S>>
unsafe fn map_to<A>( &mut self, page: Page<S>, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A, ) -> Result<MapperFlush<S>, MapToError<S>>
§unsafe fn identity_map<A>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A,
) -> Result<MapperFlush<S>, MapToError<S>>
unsafe fn identity_map<A>( &mut self, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A, ) -> Result<MapperFlush<S>, MapToError<S>>
§impl<P> Translate for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
impl<P> Translate for MappedPageTable<'_, P>where
P: PageTableFrameMapping,
§fn translate(&self, addr: VirtAddr) -> TranslateResult
fn translate(&self, addr: VirtAddr) -> TranslateResult
Auto Trait Implementations§
impl<'a, P> !UnwindSafe for MappedPageTable<'a, P>
impl<'a, P> Freeze for MappedPageTable<'a, P>where
P: Freeze,
impl<'a, P> RefUnwindSafe for MappedPageTable<'a, P>where
P: RefUnwindSafe,
impl<'a, P> Send for MappedPageTable<'a, P>where
P: Send,
impl<'a, P> Sync for MappedPageTable<'a, P>where
P: Sync,
impl<'a, P> Unpin for MappedPageTable<'a, P>where
P: Unpin,
impl<'a, P> UnsafeUnpin for MappedPageTable<'a, P>where
P: UnsafeUnpin,
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