changeset 11079:81e8def314f5

6898202 hat_flush_range is not correct for x86
author Dave Plauger <Dave.Plauger@Sun.COM>
date Tue, 17 Nov 2009 15:00:48 -0500
parents 97a14b54f53b
children 368ac1f03f55
files usr/src/uts/i86pc/vm/hat_i86.c
diffstat 1 files changed, 10 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/i86pc/vm/hat_i86.c	Tue Nov 17 14:56:25 2009 -0500
+++ b/usr/src/uts/i86pc/vm/hat_i86.c	Tue Nov 17 15:00:48 2009 -0500
@@ -2436,9 +2436,8 @@
 }
 
 /*
- * Invalidate a virtual address translation for the local CPU.
- * For best performance ensure that the va range is completely
- * mapped, otherwise the entire TLB will be flushed.
+ * Invalidate a virtual address translation on a slave CPU during
+ * panic() dumps.
  */
 void
 hat_flush_range(hat_t *hat, caddr_t va, size_t size)
@@ -2448,18 +2447,19 @@
 
 	while (va < endva) {
 		sz = hat_getpagesize(hat, va);
-		if (sz < 0)
-			va = (caddr_t)DEMAP_ALL_ADDR;
+		if (sz < 0) {
 #ifdef __xpv
-		if (va == (caddr_t)DEMAP_ALL_ADDR)
 			xen_flush_tlb();
-		else
-			xen_flush_va(va);
 #else
-		(void) hati_demap_func((xc_arg_t)hat, (xc_arg_t)va, NULL);
+			flush_all_tlb_entries();
 #endif
-		if (sz < 0)
 			break;
+		}
+#ifdef __xpv
+		xen_flush_va(va);
+#else
+		mmu_tlbflush_entry(va);
+#endif
 		va += sz;
 	}
 }