From 9c1b8a4eb085d7c639c2039fc14beba83d95653e Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Wed, 24 Aug 2022 13:24:24 -0400 Subject: sfence before writing satp, as well as after --- kernel/trampoline.S | 2 ++ 1 file changed, 2 insertions(+) (limited to 'kernel/trampoline.S') diff --git a/kernel/trampoline.S b/kernel/trampoline.S index 0aaa413..7fb0b36 100644 --- a/kernel/trampoline.S +++ b/kernel/trampoline.S @@ -82,6 +82,7 @@ uservec: # load the kernel page table, from p->trapframe->kernel_satp ld t1, 0(a0) + sfence.vma zero, zero csrw satp, t1 sfence.vma zero, zero @@ -96,6 +97,7 @@ userret: # a0: user page table, for satp. # switch to the user page table. + sfence.vma zero, zero csrw satp, a0 sfence.vma zero, zero -- cgit v1.2.3 From ed101befeefe470e49bec32b9f4efd600bdbda46 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Wed, 24 Aug 2022 13:47:47 -0400 Subject: comment the sfences --- kernel/trampoline.S | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'kernel/trampoline.S') diff --git a/kernel/trampoline.S b/kernel/trampoline.S index 7fb0b36..d7308cc 100644 --- a/kernel/trampoline.S +++ b/kernel/trampoline.S @@ -80,10 +80,18 @@ uservec: # load the address of usertrap(), from p->trapframe->kernel_trap ld t0, 16(a0) - # load the kernel page table, from p->trapframe->kernel_satp + + # fetch the kernel page table address, from p->trapframe->kernel_satp. ld t1, 0(a0) + + # wait for any previous memory operations to complete, so that + # they use the user page table. sfence.vma zero, zero + + # install the kernel page table. csrw satp, t1 + + # flush now-stale user entries from the TLB. sfence.vma zero, zero # jump to usertrap(), which does not return -- cgit v1.2.3