diff options
| author | Frans Kaashoek <kaashoek@mit.edu> | 2022-08-25 13:52:48 -0400 |
|---|---|---|
| committer | Frans Kaashoek <kaashoek@mit.edu> | 2022-08-25 13:52:48 -0400 |
| commit | 0c477a6c84091415efe2ac15509adc4b518bd7ea (patch) | |
| tree | 32cacc69f57fec08a7f543b6671c89cf7571d530 /kernel/trampoline.S | |
| parent | 7d47335b4f955fd93d2acaef745add723bc7f7d0 (diff) | |
| parent | 3d6ce9b308399f8c49c13653bd4ac21ca2311f26 (diff) | |
| download | xv6-labs-2022-0c477a6c84091415efe2ac15509adc4b518bd7ea.tar.xz xv6-labs-2022-0c477a6c84091415efe2ac15509adc4b518bd7ea.zip | |
Merge branch 'riscv' into util
Diffstat (limited to 'kernel/trampoline.S')
| -rw-r--r-- | kernel/trampoline.S | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/trampoline.S b/kernel/trampoline.S index 0aaa413..d7308cc 100644 --- a/kernel/trampoline.S +++ b/kernel/trampoline.S @@ -80,9 +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 @@ -96,6 +105,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 |
