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;
return (NullCap, NullCap)
od
| (PageTableCap ptr is_top (Some (a, v)), True) \<Rightarrow> do
doE
vroot \<leftarrow> find_vspace_for_asid a;
if vroot = ptr then liftE $ delete_asid a ptr else throwError InvalidRoot
odE <catch>
(\<lambda>_. unmap_page_table a v ptr);
| (PageTableCap ptr True (Some (a, v)), True) \<Rightarrow> do
delete_asid a ptr;
return (NullCap, NullCap)
od
| (PageTableCap ptr False (Some (a, v)), True) \<Rightarrow> do
unmap_page_table a v ptr;
return (NullCap, NullCap)
od
| (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)
finaliseCap (PageTableCap {
capPTisVSpace = True,
capPTMappedAddress = Just (asid, vptr),
capPTBasePtr = pte }) True = do
deleteASID asid pte
return (NullCap, NullCap)
catchFailure
(do
vroot <- findVSpaceForASID asid
if vroot == pte
then withoutFailure $ deleteASID asid pte
else throw InvalidRoot)
(\_ -> unmapPageTable asid vptr pte)
finaliseCap (PageTableCap {
capPTisVSpace = False,
capPTMappedAddress = Just (asid, vptr),
capPTBasePtr = pte }) True = do
unmapPageTable asid vptr pte
return (NullCap, NullCap)
finaliseCap (FrameCap {