diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-10-04 16:07:48 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-10-04 16:07:48 +0000 |
commit | 09583f57805b64642c59c88c3b2049090f307df7 (patch) | |
tree | 481962d7fc9faafe3f3b933bf450e37dc003c3d5 | |
parent | 6a7d71b6f3e65a7aaea0b142a004d9168848530f (diff) | |
download | FreeBSD-src-09583f57805b64642c59c88c3b2049090f307df7.zip FreeBSD-src-09583f57805b64642c59c88c3b2049090f307df7.tar.gz |
Follow exactly the steps in architecture manual for correctly invalidating
TLB entries instead of trying to cut corners.
-rw-r--r-- | sys/powerpc/aim/mmu_oea.c | 4 | ||||
-rw-r--r-- | sys/powerpc/aim/mmu_oea64.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c index dad3eda..27d4ef3 100644 --- a/sys/powerpc/aim/mmu_oea.c +++ b/sys/powerpc/aim/mmu_oea.c @@ -425,9 +425,9 @@ tlbie(vm_offset_t va) { mtx_lock_spin(&tlbie_mtx); + __asm __volatile("ptesync"); __asm __volatile("tlbie %0" :: "r"(va)); - __asm __volatile("tlbsync"); - powerpc_sync(); + __asm __volatile("eieio; tlbsync; ptesync"); mtx_unlock_spin(&tlbie_mtx); } diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index 0eef6a5..5e74a13 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -211,14 +211,14 @@ TLBIE(uint64_t vpn) { mfmsr %0; \ mr %1, %0; \ insrdi %1,%5,1,0; \ - mtmsrd %1; \ + mtmsrd %1; isync; \ ptesync; \ \ sld %1,%2,%4; \ or %1,%1,%3; \ tlbie %1; \ \ - mtmsrd %0; \ + mtmsrd %0; isync; \ eieio; \ tlbsync; \ ptesync;" |