aarch64 haskell+aspec: finalise_cap for VSpace
Signed-off-by: Gerwin Klein <gerwin.klein@proofcraft.systems>
This commit is contained in:
parent
61e5a84670
commit
66e67fdd77
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue