pub struct CursorEntry<'rcu> {
pub vm_space: VmSpaceId,
pub kind: CursorKind,
pub va: Range<Vaddr>,
pub owner: CursorOwner<'rcu, UserPtConfig>,
pub guards: Guards<'rcu>,
}Expand description
Per-cursor entry in the store.
guards is the lock-protocol state for the page-table nodes the
cursor holds locked; mirrors what the exec Cursor carries via
path: [Option<PageTableGuard<'rcu, C>>; NR_LEVELS].
Fields§
§vm_space: VmSpaceId§kind: CursorKind§va: Range<Vaddr>§owner: CursorOwner<'rcu, UserPtConfig>§guards: Guards<'rcu>Implementations§
Source§impl<'rcu> CursorEntry<'rcu>
impl<'rcu> CursorEntry<'rcu>
Sourcepub open spec fn inv(self) -> bool
pub open spec fn inv(self) -> bool
{
&&& self.owner.inv()
&&& self.owner.children_not_locked(self.guards)
&&& self.owner.nodes_locked(self.guards)
&&& !self.owner.popped_too_high
}The portion of the exec Cursor::invariants(owner, regions, guards)
expressible from the entry alone (no regions).
Mirrors crate::mm::page_table::Cursor::invariants minus
regions.inv(), metaregion_sound(regions), and the exec-handle
pieces (self.inv() / self.wf(owner)). Those live in
VmStore::inv (regions-touching) and are MODEL GAPS (handle).
Auto Trait Implementations§
impl<'rcu> Freeze for CursorEntry<'rcu>
impl<'rcu> !RefUnwindSafe for CursorEntry<'rcu>
impl<'rcu> Send for CursorEntry<'rcu>
impl<'rcu> Sync for CursorEntry<'rcu>
impl<'rcu> Unpin for CursorEntry<'rcu>
impl<'rcu> UnsafeUnpin for CursorEntry<'rcu>
impl<'rcu> !UnwindSafe for CursorEntry<'rcu>
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