diff options
Diffstat (limited to 'sys/powerpc/aim/mmu_oea64.c')
-rw-r--r-- | sys/powerpc/aim/mmu_oea64.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index 6cf1feb..6b3add7 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -991,8 +991,11 @@ moea64_activate(mmu_t mmu, struct thread *td) #ifdef __powerpc64__ PCPU_SET(userslb, pm->pm_slb); + __asm __volatile("slbmte %0, %1; isync" :: + "r"(td->td_pcb->pcb_cpu.aim.usr_vsid), "r"(USER_SLB_SLBE)); #else PCPU_SET(curpmap, pm->pmap_phys); + mtsrin(USER_SR << ADDR_SR_SHFT, td->td_pcb->pcb_cpu.aim.usr_vsid); #endif } @@ -1001,6 +1004,8 @@ moea64_deactivate(mmu_t mmu, struct thread *td) { pmap_t pm; + __asm __volatile("isync; slbie %0" :: "r"(USER_ADDR)); + pm = &td->td_proc->p_vmspace->vm_pmap; CPU_CLR(PCPU_GET(cpuid), &pm->pm_active); #ifdef __powerpc64__ |