svn commit: r206594 - user/jmallett/octeon/sys/mips/mips

Juli Mallett jmallett at FreeBSD.org
Wed Apr 14 06:56:48 UTC 2010


Author: jmallett
Date: Wed Apr 14 06:56:48 2010
New Revision: 206594
URL: http://svn.freebsd.org/changeset/base/206594

Log:
  o) Add an invariant to pmap_kenter that the previous mapping is invalid or
     identical to the new mapping.  Something is leaving a mapping valid or doing
     a double pmap_kenter (well, pmap_qenter) but I don't know what, but it's
     identical to the previous one, so I assume it's the latter (like was in the
     sfbuf code that I just removed.)
  o) Given that invariant, neither invalidate nor update the TLB in pmap_kenter,
     since it should have been invalidated in pmap_kremove.

Modified:
  user/jmallett/octeon/sys/mips/mips/pmap.c

Modified: user/jmallett/octeon/sys/mips/mips/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/pmap.c	Wed Apr 14 06:47:34 2010	(r206593)
+++ user/jmallett/octeon/sys/mips/mips/pmap.c	Wed Apr 14 06:56:48 2010	(r206594)
@@ -750,19 +750,9 @@ pmap_kenter(vm_offset_t va, vm_paddr_t p
 		npte |= PG_C_UC;
 
 	pte = pmap_pte(kernel_pmap, va);
+	KASSERT(!pte_test(pte, PG_V) || *pte == npte,
+		("pmap_kenter for %p with different valid entry", (void *)va));
 	*pte = npte;
-
-#if 0
-	/*
-	 * The original code did an update_page() here, but
-	 * we often do a lot of pmap_kenter() calls and then
-	 * start using the addresses later, at which point
-	 * the TLB has overflown many times.
-	 */
-	pmap_invalidate_page(kernel_pmap, va);
-#else
-	pmap_update_page(kernel_pmap, va, npte);
-#endif
 }
 
 /*
@@ -2741,6 +2731,10 @@ pmap_mapdev(vm_offset_t pa, vm_size_t si
 		if (!va)
 			panic("pmap_mapdev: Couldn't alloc kernel virtual memory");
 		pa = trunc_page(pa);
+		/*
+		 * XXX
+		 * Shouldn't we make these pages uncached?
+		 */
 		for (tmpva = va; size > 0;) {
 			pmap_kenter(tmpva, pa);
 			size -= PAGE_SIZE;


More information about the svn-src-user mailing list