Index: pmap.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc/sparc/pmap.c,v retrieving revision 1.340 diff -p -r1.340 pmap.c *** pmap.c 26 Apr 2010 09:26:25 -0000 1.340 --- pmap.c 26 Jan 2011 20:56:25 -0000 *************** pgt_page_alloc(struct pool *pp, int flag *** 888,893 **** --- 888,897 ---- pa = VM_PAGE_TO_PHYS(pg); if (cacheit == 0) pcache_flush_page(pa, 1); + #if 0 + else + cache_flush_page(va, 1); + #endif /* Map the page */ pmap_kenter_pa(va, pa | (cacheit ? 0 : PMAP_NC), *************** pgt_page_alloc(struct pool *pp, int flag *** 900,905 **** --- 904,910 ---- void pgt_page_free(struct pool *pp, void *v) { + int cacheit = (cpuinfo.flags & CPUFLG_CACHEPAGETABLES) != 0; vaddr_t va; paddr_t pa; bool rv; *************** pgt_page_free(struct pool *pp, void *v) *** 907,912 **** --- 912,921 ---- va = (vaddr_t)v; rv = pmap_extract(pmap_kernel(), va, &pa); KASSERT(rv); + if (cacheit == 0) + pcache_flush_page(pa, 1); + else + cache_flush_page(va, 1); uvm_pagefree(PHYS_TO_VM_PAGE(pa)); pmap_kremove(va, PAGE_SIZE); uvm_km_free(kmem_map, va, PAGE_SIZE, UVM_KMF_VAONLY);