aarch64 haskell+aspec: finalise_cap for VSpace

Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
This commit is contained in:
Gerwin Klein 2022-03-18 17:17:02 +11:00 committed by Gerwin Klein
parent 61e5a84670
commit 66e67fdd77
2 changed files with 14 additions and 14 deletions

View File

@ -620,12 +620,12 @@ definition arch_finalise_cap :: "arch_cap \<Rightarrow> bool \<Rightarrow> (cap
delete_asid_pool b ptr; delete_asid_pool b ptr;
return (NullCap, NullCap) return (NullCap, NullCap)
od od
| (PageTableCap ptr is_top (Some (a, v)), True) \<Rightarrow> do | (PageTableCap ptr True (Some (a, v)), True) \<Rightarrow> do
doE delete_asid a ptr;
vroot \<leftarrow> find_vspace_for_asid a; return (NullCap, NullCap)
if vroot = ptr then liftE $ delete_asid a ptr else throwError InvalidRoot od
odE <catch> | (PageTableCap ptr False (Some (a, v)), True) \<Rightarrow> do
(\<lambda>_. unmap_page_table a v ptr); unmap_page_table a v ptr;
return (NullCap, NullCap) return (NullCap, NullCap)
od od
| (FrameCap ptr _ sz _ (Some (a, v)), _) \<Rightarrow> do | (FrameCap ptr _ sz _ (Some (a, v)), _) \<Rightarrow> do

View File

@ -89,17 +89,17 @@ finaliseCap (ASIDPoolCap { capASIDBase = b, capASIDPool = ptr }) True = do
return (NullCap, NullCap) return (NullCap, NullCap)
finaliseCap (PageTableCap { finaliseCap (PageTableCap {
capPTisVSpace = True,
capPTMappedAddress = Just (asid, vptr), capPTMappedAddress = Just (asid, vptr),
capPTBasePtr = pte }) True = do capPTBasePtr = pte }) True = do
deleteASID asid pte
return (NullCap, NullCap)
catchFailure finaliseCap (PageTableCap {
(do capPTisVSpace = False,
vroot <- findVSpaceForASID asid capPTMappedAddress = Just (asid, vptr),
if vroot == pte capPTBasePtr = pte }) True = do
then withoutFailure $ deleteASID asid pte unmapPageTable asid vptr pte
else throw InvalidRoot)
(\_ -> unmapPageTable asid vptr pte)
return (NullCap, NullCap) return (NullCap, NullCap)
finaliseCap (FrameCap { finaliseCap (FrameCap {