Author: neel
Date: Tue Sep 14 01:27:53 2010
New Revision: 212589
URL: http://svn.freebsd.org/changeset/base/212589

Log:
  Enforce that pmap_mapdev() always returns uncacheable mappings.
  
  Reviewed by:  imp, jchandra, jmallett

Modified:
  head/sys/mips/mips/pmap.c

Modified: head/sys/mips/mips/pmap.c
==============================================================================
--- head/sys/mips/mips/pmap.c   Tue Sep 14 01:10:30 2010        (r212588)
+++ head/sys/mips/mips/pmap.c   Tue Sep 14 01:27:53 2010        (r212589)
@@ -828,8 +828,8 @@ retry:
 /*
  * add a wired page to the kva
  */
- /* PMAP_INLINE */ void
-pmap_kenter(vm_offset_t va, vm_paddr_t pa)
+static void
+pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int attr)
 {
        pt_entry_t *pte;
        pt_entry_t opte, npte;
@@ -837,12 +837,7 @@ pmap_kenter(vm_offset_t va, vm_paddr_t p
 #ifdef PMAP_DEBUG
        printf("pmap_kenter:  va: %p -> pa: %p\n", (void *)va, (void *)pa);
 #endif
-       npte = TLBLO_PA_TO_PFN(pa) | PTE_D | PTE_V | PTE_G | PTE_W;
-
-       if (is_cacheable_mem(pa))
-               npte |= PTE_C_CACHE;
-       else
-               npte |= PTE_C_UNCACHED;
+       npte = TLBLO_PA_TO_PFN(pa) | PTE_D | PTE_V | PTE_G | PTE_W | attr;
 
        pte = pmap_pte(kernel_pmap, va);
        opte = *pte;
@@ -851,6 +846,19 @@ pmap_kenter(vm_offset_t va, vm_paddr_t p
                pmap_update_page(kernel_pmap, va, npte);
 }
 
+void
+pmap_kenter(vm_offset_t va, vm_paddr_t pa)
+{
+       int attr;
+
+       if (is_cacheable_mem(pa))
+               attr = PTE_C_CACHE;
+       else
+               attr = PTE_C_UNCACHED;
+
+       pmap_kenter_attr(va, pa, attr);
+}
+
 /*
  * remove a page from the kernel pagetables
  */
@@ -2863,7 +2871,7 @@ pmap_mapdev(vm_offset_t pa, vm_size_t si
                        panic("pmap_mapdev: Couldn't alloc kernel virtual 
memory");
                pa = trunc_page(pa);
                for (tmpva = va; size > 0;) {
-                       pmap_kenter(tmpva, pa);
+                       pmap_kenter_attr(tmpva, pa, PTE_C_UNCACHED);
                        size -= PAGE_SIZE;
                        tmpva += PAGE_SIZE;
                        pa += PAGE_SIZE;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to