sfence.vma in trampoline as well
This commit is contained in:
parent
9b9e2dd0f2
commit
25e113138d
|
@ -13,7 +13,9 @@ main()
|
||||||
if(cpuid() == 0){
|
if(cpuid() == 0){
|
||||||
consoleinit();
|
consoleinit();
|
||||||
printfinit();
|
printfinit();
|
||||||
printf("hart %d starting\n", cpuid());
|
printf("\n");
|
||||||
|
printf("xv6 kernel is booting\n");
|
||||||
|
printf("\n");
|
||||||
kinit(); // physical page allocator
|
kinit(); // physical page allocator
|
||||||
kvminit(); // create kernel page table
|
kvminit(); // create kernel page table
|
||||||
kvminithart(); // turn on paging
|
kvminithart(); // turn on paging
|
||||||
|
|
|
@ -75,8 +75,8 @@ uservec:
|
||||||
|
|
||||||
# restore kernel page table from p->tf->kernel_satp
|
# restore kernel page table from p->tf->kernel_satp
|
||||||
ld t1, 0(a0)
|
ld t1, 0(a0)
|
||||||
sfence.vma zero, zero
|
|
||||||
csrw satp, t1
|
csrw satp, t1
|
||||||
|
sfence.vma zero, zero
|
||||||
|
|
||||||
# a0 is no longer valid, since the kernel page
|
# a0 is no longer valid, since the kernel page
|
||||||
# table does not specially map p->td.
|
# table does not specially map p->td.
|
||||||
|
@ -89,12 +89,12 @@ userret:
|
||||||
# userret(TRAPFRAME, pagetable)
|
# userret(TRAPFRAME, pagetable)
|
||||||
# switch from kernel to user.
|
# switch from kernel to user.
|
||||||
# usertrapret() calls here.
|
# usertrapret() calls here.
|
||||||
# a0: TRAPFRAME, in user page table
|
# a0: TRAPFRAME, in user page table
|
||||||
# a1: user page table, for satp
|
# a1: user page table, for satp
|
||||||
|
|
||||||
# switch to the user page table.
|
# switch to the user page table.
|
||||||
sfence.vma zero, zero
|
|
||||||
csrw satp, a1
|
csrw satp, a1
|
||||||
|
sfence.vma zero, zero
|
||||||
|
|
||||||
# put the saved user a0 in sscratch, so we
|
# put the saved user a0 in sscratch, so we
|
||||||
# can swap it with our a0 (TRAPFRAME) in the last step.
|
# can swap it with our a0 (TRAPFRAME) in the last step.
|
||||||
|
|
Loading…
Reference in a new issue