riscv aspec: fix addr conversions in set_vm_root
global_pt needs addrFromKPPtr, because it is an address that lives in the kernel image, other pt's need addrFromPPtr because they are standard kernel-virtual addresses.
This commit is contained in:
parent
e44423d6bb
commit
d4f3d7122c
|
@ -95,12 +95,12 @@ definition set_vm_root :: "obj_ref \<Rightarrow> (unit,'z::state_ext) s_monad"
|
||||||
ArchObjectCap (PageTableCap pt (Some (asid, _))) \<Rightarrow> doE
|
ArchObjectCap (PageTableCap pt (Some (asid, _))) \<Rightarrow> doE
|
||||||
pt' \<leftarrow> find_vspace_for_asid asid;
|
pt' \<leftarrow> find_vspace_for_asid asid;
|
||||||
whenE (pt \<noteq> pt') $ throwError InvalidRoot;
|
whenE (pt \<noteq> pt') $ throwError InvalidRoot;
|
||||||
liftE $ do_machine_op $ setVSpaceRoot pt (ucast asid)
|
liftE $ do_machine_op $ setVSpaceRoot (addrFromPPtr pt) (ucast asid)
|
||||||
odE
|
odE
|
||||||
| _ \<Rightarrow> throwError InvalidRoot) <catch>
|
| _ \<Rightarrow> throwError InvalidRoot) <catch>
|
||||||
(\<lambda>_. do
|
(\<lambda>_. do
|
||||||
global_pt \<leftarrow> gets global_pt;
|
global_pt \<leftarrow> gets global_pt;
|
||||||
do_machine_op $ setVSpaceRoot (addrFromPPtr global_pt) 0
|
do_machine_op $ setVSpaceRoot (addrFromKPPtr global_pt) 0
|
||||||
od)
|
od)
|
||||||
od"
|
od"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue