Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions aster_common/src/mm/frame/frame_ref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ use std::ops::Deref;

use core::mem::ManuallyDrop;

use vstd_extra::external::manually_drop::*;

use super::*;

verus! {
Expand All @@ -20,7 +18,7 @@ pub struct FrameRef<'a, M: AnyFrameMeta> {
impl<M: AnyFrameMeta> Deref for FrameRef<'_, M> {
type Target = Frame<M>;

#[verus_spec(ensures returns manually_drop_deref_spec(&self.inner))]
#[verus_spec(returns &self.inner@)]
fn deref(&self) -> &Self::Target {
&self.inner
}
Expand Down
6 changes: 3 additions & 3 deletions aster_common/src/mm/page_table/node/entry_owners.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ pub tracked struct NodeEntryOwner<'rcu, C: PageTableConfig> {
impl<'rcu, C: PageTableConfig> Inv for NodeEntryOwner<'rcu, C> {
open spec fn inv(self) -> bool {
&&& self.guard_perm.is_init()
&&& self.guard_perm.value().inner.inner.ptr.addr() == self.as_node.meta_perm.addr()
&&& self.guard_perm.value().inner.inner.wf(self.as_node)
&&& self.guard_perm.value().inner.inner@.ptr.addr() == self.as_node.meta_perm.addr()
&&& self.guard_perm.value().inner.inner@.wf(self.as_node)
&&& self.as_node.inv()
&&& meta_to_frame(self.as_node.meta_perm.addr()) < VMALLOC_BASE_VADDR()
- LINEAR_MAPPING_BASE_VADDR()
Expand Down Expand Up @@ -76,7 +76,7 @@ impl<'rcu, C: PageTableConfig> EntryOwner<'rcu, C> {
pub open spec fn relate_parent_guard_perm(self, guard_perm: PointsTo<PageTableGuard<'rcu, C>>) -> bool {
&&& guard_perm.addr() == self.guard_addr
&&& guard_perm.is_init()
&&& guard_perm.value().inner.inner.ptr.addr() == self.base_addr
&&& guard_perm.value().inner.inner@.ptr.addr() == self.base_addr
}
}

Expand Down
1 change: 0 additions & 1 deletion ostd/src/mm/frame/frame_ref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use core::{marker::PhantomData, mem::ManuallyDrop, ops::Deref, ptr::NonNull};

use vstd::prelude::*;

use vstd_extra::external::manually_drop::*;
use vstd_extra::ownership::*;

use aster_common::prelude::frame::*;
Expand Down
4 changes: 2 additions & 2 deletions ostd/src/mm/page_table/cursor/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -366,9 +366,9 @@ impl<'rcu, C: PageTableConfig, A: InAtomicMode> Cursor<'rcu, C, A> {
#[verus_spec(with Tracked(&mut child_node_owner.guard_perm))]
let pt_guard = pt.make_guard_unchecked(rcu_guard);

assert(parent_node_owner.guard_perm.value().inner.inner.wf(parent_node_owner.as_node));
assert(parent_node_owner.guard_perm.value().inner.inner@.wf(parent_node_owner.as_node));
// assert(parent_node_owner.guard_perm.value().inner.inner.ptr.addr() == parent_node_owner.as_node.meta_perm.addr()) by { admit() };
assert(child_node_owner.guard_perm.value().inner.inner.ptr.addr() == child_node_owner.as_node.meta_perm.points_to.addr()) by { admit() };
assert(child_node_owner.guard_perm.value().inner.inner@.ptr.addr() == child_node_owner.as_node.meta_perm.points_to.addr()) by { admit() };
assert(parent_node_owner.as_node.inv()) by { admit() };

#[verus_spec(with Tracked(&mut child_node_owner.as_node))]
Expand Down
8 changes: 4 additions & 4 deletions ostd/src/mm/page_table/node/entry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ impl<'a, 'rcu, C: PageTableConfig> Entry<'rcu, C> {
self.node == guard_perm.pptr(),
guard_perm.is_init(),
owner.is_node(), // The owner is the owner of the parent node, so should always be a node
inner_perm.addr() == guard_perm.value().inner.inner.ptr.addr(),
inner_perm.points_to.addr() == guard_perm.value().inner.inner.ptr.addr(),
inner_perm.addr() == guard_perm.value().inner.inner@.ptr.addr(),
inner_perm.points_to.addr() == guard_perm.value().inner.inner@.ptr.addr(),
inner_perm.is_init(),
inner_perm.wf(),
{
Expand Down Expand Up @@ -172,8 +172,8 @@ impl<'a, 'rcu, C: PageTableConfig> Entry<'rcu, C> {
new_child is PageTable,
FRAME_METADATA_RANGE().start <= frame_to_index(new_child.get_node().unwrap().ptr.addr())
< FRAME_METADATA_RANGE().end,
inner_perm.addr() == old(guard_perm).value().inner.inner.ptr.addr(),
inner_perm.points_to.addr() == old(guard_perm).value().inner.inner.ptr.addr(),
inner_perm.addr() == old(guard_perm).value().inner.inner@.ptr.addr(),
inner_perm.points_to.addr() == old(guard_perm).value().inner.inner@.ptr.addr(),
inner_perm.is_init(),
inner_perm.wf(),
{
Expand Down
16 changes: 8 additions & 8 deletions ostd/src/mm/page_table/node/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,8 @@ impl<'rcu, C: PageTableConfig> PageTableGuard<'rcu, C> {
)]
pub fn nr_children(&self) -> (nr: u16)
requires
self.inner.inner.ptr.addr() == old(owner).meta_perm.addr(),
self.inner.inner.ptr.addr() == old(owner).meta_perm.points_to.addr(),
self.inner.inner@.ptr.addr() == old(owner).meta_perm.addr(),
self.inner.inner@.ptr.addr() == old(owner).meta_perm.points_to.addr(),
old(owner).inv(),
ensures
owner == old(owner)
Expand All @@ -242,8 +242,8 @@ impl<'rcu, C: PageTableConfig> PageTableGuard<'rcu, C> {
pub fn stray_mut(&mut self) -> PCell<bool>
requires
owner.is_node(),
old(self).inner.inner.ptr.addr() == owner.node.unwrap().as_node.meta_perm.addr(),
old(self).inner.inner.ptr.addr() == owner.node.unwrap().as_node.meta_perm.points_to.addr(),
old(self).inner.inner@.ptr.addr() == owner.node.unwrap().as_node.meta_perm.addr(),
old(self).inner.inner@.ptr.addr() == owner.node.unwrap().as_node.meta_perm.points_to.addr(),
owner.inv(),
{
let tracked node_owner = owner.node.tracked_borrow();
Expand All @@ -270,8 +270,8 @@ impl<'rcu, C: PageTableConfig> PageTableGuard<'rcu, C> {
)]
pub fn read_pte(&self, idx: usize) -> C::E
requires
self.inner.inner.ptr.addr() == owner.meta_perm.addr,
self.inner.inner.ptr.addr() == owner.meta_perm.points_to.addr(),
self.inner.inner@.ptr.addr() == owner.meta_perm.addr(),
self.inner.inner@.ptr.addr() == owner.meta_perm.points_to.addr(),
owner.inv(),
meta_to_frame(owner.meta_perm.addr) < VMALLOC_BASE_VADDR() - LINEAR_MAPPING_BASE_VADDR(),
FRAME_METADATA_RANGE().start <= owner.meta_perm.addr < FRAME_METADATA_RANGE().end,
Expand Down Expand Up @@ -337,8 +337,8 @@ impl<'rcu, C: PageTableConfig> PageTableGuard<'rcu, C> {
)]
fn nr_children_mut<'a>(&'a mut self) -> &'a PCell<u16>
requires
old(self).inner.inner.ptr.addr() == meta_perm.addr(),
old(self).inner.inner.ptr.addr() == meta_perm.points_to.addr(),
old(self).inner.inner@.ptr.addr() == meta_perm.addr(),
old(self).inner.inner@.ptr.addr() == meta_perm.points_to.addr(),
meta_perm.is_init(),
meta_perm.wf(),
{
Expand Down
2 changes: 1 addition & 1 deletion ostd/src/sync/rcu/non_null/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ impl<'a, T> ArcRef<'a, T> {
}

pub closed spec fn deref_as_arc_spec(&self) -> &Arc<T> {
manually_drop_deref_spec(&self.inner)
&self.inner@
}

/// A workaround that Verus does not support implementing spec for Deref trait yet.
Expand Down
6 changes: 0 additions & 6 deletions vstd_extra/src/external/deref.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use super::manually_drop::manually_drop_deref_spec;
use core::hint::spin_loop;
use core::mem::ManuallyDrop;
use core::ops::Deref;
Expand Down Expand Up @@ -47,11 +46,6 @@ pub broadcast axiom fn arc_deref_spec<T>(a: std::sync::Arc<T>)
#[trigger] *(a.deref_spec()) == *a,
;

pub broadcast axiom fn manually_drop_deref_spec_eq<T: ?Sized>(v: &ManuallyDrop<T>)
ensures
#[trigger] &**v == manually_drop_deref_spec(v),
;

pub broadcast group group_deref_spec {
ref_deref_spec,
box_deref_spec,
Expand Down
37 changes: 0 additions & 37 deletions vstd_extra/src/external/manually_drop.rs

This file was deleted.

2 changes: 0 additions & 2 deletions vstd_extra/src/external/mod.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
// Specifications for external functions and traits
pub mod deref;
pub mod ilog2;
pub mod manually_drop;
pub mod nonnull;
pub mod smart_ptr;

pub use deref::*;
pub use ilog2::*;
pub use manually_drop::*;
pub use nonnull::*;
pub use smart_ptr::*;

Expand Down