summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2010-10-04 16:07:48 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2010-10-04 16:07:48 +0000
commit09583f57805b64642c59c88c3b2049090f307df7 (patch)
tree481962d7fc9faafe3f3b933bf450e37dc003c3d5
parent6a7d71b6f3e65a7aaea0b142a004d9168848530f (diff)
downloadFreeBSD-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.c4
-rw-r--r--sys/powerpc/aim/mmu_oea64.c4
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;"
OpenPOWER on IntegriCloud