summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim/mmu_oea64.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/powerpc/aim/mmu_oea64.c')
-rw-r--r--sys/powerpc/aim/mmu_oea64.c5
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__
OpenPOWER on IntegriCloud