Mercurial > illumos > illumos-gate
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; } }