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;
|
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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue