mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-23 09:23:25 +00:00
Remove the level in RawPageTableNode
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
6cfccccab1
commit
4f2d537516
@ -271,12 +271,16 @@ where
|
|||||||
fn level_down(&mut self) {
|
fn level_down(&mut self) {
|
||||||
debug_assert!(self.level > 1);
|
debug_assert!(self.level > 1);
|
||||||
|
|
||||||
if let Child::PageTable(nxt_lvl_ptn) = self.cur_child() {
|
let Child::PageTable(nxt_lvl_ptn) = self.cur_child() else {
|
||||||
self.level -= 1;
|
|
||||||
self.guards[(self.level - 1) as usize] = Some(nxt_lvl_ptn.lock());
|
|
||||||
} else {
|
|
||||||
panic!("Trying to level down when it is not mapped to a page table");
|
panic!("Trying to level down when it is not mapped to a page table");
|
||||||
}
|
};
|
||||||
|
|
||||||
|
let nxt_lvl_ptn_locked = nxt_lvl_ptn.lock();
|
||||||
|
|
||||||
|
self.level -= 1;
|
||||||
|
debug_assert_eq!(self.level, nxt_lvl_ptn_locked.level());
|
||||||
|
|
||||||
|
self.guards[(self.level - 1) as usize] = Some(nxt_lvl_ptn_locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cur_node(&self) -> &PageTableNode<E, C> {
|
fn cur_node(&self) -> &PageTableNode<E, C> {
|
||||||
|
@ -56,7 +56,6 @@ where
|
|||||||
[(); C::NR_LEVELS as usize]:,
|
[(); C::NR_LEVELS as usize]:,
|
||||||
{
|
{
|
||||||
pub(super) raw: Paddr,
|
pub(super) raw: Paddr,
|
||||||
pub(super) level: PagingLevel,
|
|
||||||
_phantom: PhantomData<(E, C)>,
|
_phantom: PhantomData<(E, C)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +73,6 @@ where
|
|||||||
// transferring the ownership to a new handle. No increment of the reference
|
// transferring the ownership to a new handle. No increment of the reference
|
||||||
// count is needed.
|
// count is needed.
|
||||||
let page = unsafe { Page::<PageTablePageMeta<E, C>>::from_raw(self.paddr()) };
|
let page = unsafe { Page::<PageTablePageMeta<E, C>>::from_raw(self.paddr()) };
|
||||||
debug_assert!(page.meta().level == self.level);
|
|
||||||
|
|
||||||
// Acquire the lock.
|
// Acquire the lock.
|
||||||
while page
|
while page
|
||||||
@ -98,7 +96,6 @@ where
|
|||||||
|
|
||||||
Self {
|
Self {
|
||||||
raw: self.raw,
|
raw: self.raw,
|
||||||
level: self.level,
|
|
||||||
_phantom: PhantomData,
|
_phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -121,8 +118,6 @@ where
|
|||||||
mm::CachePolicy,
|
mm::CachePolicy,
|
||||||
};
|
};
|
||||||
|
|
||||||
debug_assert_eq!(self.level, PagingConsts::NR_LEVELS);
|
|
||||||
|
|
||||||
let last_activated_paddr = current_page_table_paddr();
|
let last_activated_paddr = current_page_table_paddr();
|
||||||
|
|
||||||
activate_page_table(self.raw, CachePolicy::Writeback);
|
activate_page_table(self.raw, CachePolicy::Writeback);
|
||||||
@ -137,7 +132,6 @@ where
|
|||||||
// Restore and drop the last activated page table.
|
// Restore and drop the last activated page table.
|
||||||
drop(Self {
|
drop(Self {
|
||||||
raw: last_activated_paddr,
|
raw: last_activated_paddr,
|
||||||
level: PagingConsts::NR_LEVELS,
|
|
||||||
_phantom: PhantomData,
|
_phantom: PhantomData,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -149,8 +143,6 @@ where
|
|||||||
pub(super) unsafe fn first_activate(&self) {
|
pub(super) unsafe fn first_activate(&self) {
|
||||||
use crate::{arch::mm::activate_page_table, mm::CachePolicy};
|
use crate::{arch::mm::activate_page_table, mm::CachePolicy};
|
||||||
|
|
||||||
debug_assert_eq!(self.level, PagingConsts::NR_LEVELS);
|
|
||||||
|
|
||||||
self.inc_ref();
|
self.inc_ref();
|
||||||
|
|
||||||
activate_page_table(self.raw, CachePolicy::Writeback);
|
activate_page_table(self.raw, CachePolicy::Writeback);
|
||||||
@ -240,7 +232,6 @@ where
|
|||||||
|
|
||||||
/// Converts the handle into a raw handle to be stored in a PTE or CPU.
|
/// Converts the handle into a raw handle to be stored in a PTE or CPU.
|
||||||
pub(super) fn into_raw(self) -> RawPageTableNode<E, C> {
|
pub(super) fn into_raw(self) -> RawPageTableNode<E, C> {
|
||||||
let level = self.level();
|
|
||||||
let raw = self.page.paddr();
|
let raw = self.page.paddr();
|
||||||
|
|
||||||
self.page.meta().lock.store(0, Ordering::Release);
|
self.page.meta().lock.store(0, Ordering::Release);
|
||||||
@ -248,7 +239,6 @@ where
|
|||||||
|
|
||||||
RawPageTableNode {
|
RawPageTableNode {
|
||||||
raw,
|
raw,
|
||||||
level,
|
|
||||||
_phantom: PhantomData,
|
_phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -259,7 +249,6 @@ where
|
|||||||
|
|
||||||
RawPageTableNode {
|
RawPageTableNode {
|
||||||
raw: self.page.paddr(),
|
raw: self.page.paddr(),
|
||||||
level: self.level(),
|
|
||||||
_phantom: PhantomData,
|
_phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -283,7 +272,6 @@ where
|
|||||||
core::mem::forget(inc_ref);
|
core::mem::forget(inc_ref);
|
||||||
Child::PageTable(RawPageTableNode {
|
Child::PageTable(RawPageTableNode {
|
||||||
raw: paddr,
|
raw: paddr,
|
||||||
level: self.level() - 1,
|
|
||||||
_phantom: PhantomData,
|
_phantom: PhantomData,
|
||||||
})
|
})
|
||||||
} else if in_tracked_range {
|
} else if in_tracked_range {
|
||||||
@ -368,7 +356,6 @@ where
|
|||||||
) {
|
) {
|
||||||
// They should be ensured by the cursor.
|
// They should be ensured by the cursor.
|
||||||
debug_assert!(idx < nr_subpage_per_huge::<C>());
|
debug_assert!(idx < nr_subpage_per_huge::<C>());
|
||||||
debug_assert_eq!(pt.level, self.level() - 1);
|
|
||||||
|
|
||||||
let pte = Some(E::new_pt(pt.paddr()));
|
let pte = Some(E::new_pt(pt.paddr()));
|
||||||
self.overwrite_pte(idx, pte, in_tracked_range);
|
self.overwrite_pte(idx, pte, in_tracked_range);
|
||||||
|
Reference in New Issue
Block a user