pub struct NodeOwner<C: PageTableConfig> {
pub meta_own: PageMetaOwner,
pub meta_perm: PointsTo<MetaSlot, PageTablePageMeta<C>>,
pub children_perm: PointsTo<C::E, CONST_NR_ENTRIES>,
pub level: PagingLevel,
pub path: TreePath<CONST_NR_ENTRIES>,
}Fields§
§meta_own: PageMetaOwner§meta_perm: PointsTo<MetaSlot, PageTablePageMeta<C>>§children_perm: PointsTo<C::E, CONST_NR_ENTRIES>§level: PagingLevel§path: TreePath<CONST_NR_ENTRIES>Implementations§
Source§impl<'rcu, C: PageTableConfig> NodeOwner<C>
impl<'rcu, C: PageTableConfig> NodeOwner<C>
Sourcepub open spec fn relate_guard_perm(self, guard_perm: GuardPerm<'rcu, C>) -> bool
pub open spec fn relate_guard_perm(self, guard_perm: GuardPerm<'rcu, C>) -> bool
{
&&& guard_perm.is_init()
&&& guard_perm.value().inner.inner@.ptr.addr() == self.meta_perm.addr()
&&& guard_perm.value().inner.inner@.ptr.addr() == self.meta_perm.points_to.addr()
&&& guard_perm.value().inner.inner@.wf(self)
&&& self.meta_perm.is_init()
&&& self.meta_perm.wf()
}Sourcepub open spec fn relate_region(self, regions: MetaRegionOwners) -> bool
pub open spec fn relate_region(self, regions: MetaRegionOwners) -> bool
{
&&& !regions.slots.contains_key(frame_to_index(meta_to_frame(self.meta_perm.addr())))
&&& regions
.slot_owners[frame_to_index(meta_to_frame(self.meta_perm.addr()))]
.path_if_in_pt == Some(self.path)
}All nodes’ metadata is forgotten for the duration of their lifetime.
Trait Implementations§
Source§impl<C: PageTableConfig> Inv for NodeOwner<C>
impl<C: PageTableConfig> Inv for NodeOwner<C>
Source§open spec fn inv(self) -> bool
open spec fn inv(self) -> bool
{
&&& self.meta_perm.points_to.is_init()
&&& <PageTablePageMeta<C> as Repr<MetaSlot>>::wf(self.meta_perm.points_to.value())
&&& self.meta_perm.addr() == self.meta_perm.points_to.addr()
&&& self.meta_own.inv()
&&& self.meta_perm.value().wf(self.meta_own)
&&& self.meta_perm.is_init()
&&& self.meta_perm.wf()
&&& FRAME_METADATA_RANGE().start <= self.meta_perm.addr()
< FRAME_METADATA_RANGE().end
&&& self.meta_perm.addr() % META_SLOT_SIZE() == 0
&&& meta_to_frame(self.meta_perm.addr())
< VMALLOC_BASE_VADDR() - LINEAR_MAPPING_BASE_VADDR()
&&& meta_to_frame(self.meta_perm.addr()) < MAX_PADDR()
&&& meta_to_frame(self.meta_perm.addr()) == self.children_perm.addr()
&&& self.meta_own.nr_children.id() == self.meta_perm.value().nr_children.id()
&&& 0 <= self.meta_own.nr_children.value() <= NR_ENTRIES()
&&& 1 <= self.level <= NR_LEVELS()
&&& self.children_perm.is_init_all()
&&& self.children_perm.addr() == paddr_to_vaddr(meta_to_frame(self.meta_perm.addr()))
}Source§impl<C: PageTableConfig> InvView for NodeOwner<C>
impl<C: PageTableConfig> InvView for NodeOwner<C>
Source§proof fn view_preserves_inv(self)
proof fn view_preserves_inv(self)
Auto Trait Implementations§
impl<C> Freeze for NodeOwner<C>
impl<C> !RefUnwindSafe for NodeOwner<C>
impl<C> Send for NodeOwner<C>
impl<C> Sync for NodeOwner<C>
impl<C> Unpin for NodeOwner<C>
impl<C> UnwindSafe for NodeOwner<C>
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
Mutably borrows from an owned value. Read more