Expand description
Embedding of Cursor / CursorMut operations: open, drop,
navigation (query/find_next/jump), and mutation
(map/unmap/protect_next).
Per-op steps operate on tracked owners directly — no store lookups,
no preconditions on store membership, no if-guards. The store-side
extract / insert and id-management lives in
super::VmStore’s methods and the super::step dispatcher.
§Mirroring exec preconditions
Each _embedded axiom carries the same requires as its exec
counterpart, expressed against our model. The expressible parts are:
owner.inv(),owner.children_not_locked(guards),owner.nodes_locked(guards),!owner.popped_too_high— bundled asCursorEntry::inv(entry-side); seesuper::CursorEntry.owner.in_locked_range()— NOT a precondition ofquery,jump, ormap: each handles an out-of-range cursor itself (gracefulErrforquery; a faithfulpanic_divergeotherwise) and re-derivesin_locked_rangeinternally.protect_nextstill requires it; see exec clauses.regions.inv(),owner.metaregion_sound(regions)— passed via&mut regions.tlb_model.inv()— passed via&mut tlb_modeltomap/unmap.
§Model gaps
- Exec
Cursorhandle: the execCursor::invariantsrequiresself.inv()andself.wf(owner)over the runtimeCursorstruct. Our embedding doesn’t carry that handle (it’s tied to the&'rcu RCU guardreference, not constructible in pure ghost mode), so these conjuncts are MODEL GAPS. Owner-side state already mirrors handle state (owner.va,owner.level,owner.guard_level), sowf(owner)is essentially tautological if we postulate the handle’s existence;inv()follows fromowner.inv()plus this projection. item_wfon map: the execcrate::mm::vm_space::CursorMut::maprequiresold(self).item_wf(frame, prop, entry_owner, *old(regions)), which constrains a separateEntryOwner<UserPtConfig>argument produced by cursor traversal. We don’t modelEntryOwnerhere.protect_nextclosure preconditions: the exec method takes a closureop: impl FnOnce(PageProperty) -> PagePropertywithforall |p| op.requires((p,))plus a trackedness-preservation constraint. OurOp::ProtectNextdoesn’t carry the closure.
Enums§
- Cursor
MutRegions Method - Internal: dispatch tag for cursor methods that also touch
MetaRegionOwnersandTlbModel.Mapis handled via its own [map_step].