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

Juli Mallett jmallett at FreeBSD.org
Mon Apr 19 19:49:39 UTC 2010


Author: jmallett
Date: Mon Apr 19 19:49:39 2010
New Revision: 206857
URL: http://svn.freebsd.org/changeset/base/206857

Log:
  Finally hit a pmap_kenter() of a still-valid address with a different mapping.
  Would be useful to track that down at some point.

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	Mon Apr 19 19:29:33 2010	(r206856)
+++ user/jmallett/octeon/sys/mips/mips/pmap.c	Mon Apr 19 19:49:39 2010	(r206857)
@@ -719,7 +719,7 @@ pmap_extract_and_hold(pmap_t pmap, vm_of
 pmap_kenter(vm_offset_t va, vm_paddr_t pa)
 {
 	pt_entry_t *pte;
-	pt_entry_t npte;
+	pt_entry_t opte, npte;
 
 #ifdef PMAP_DEBUG
 	printf("pmap_kenter:  va: %p -> pa: %p\n", (void *)va, (void *)pa);
@@ -732,9 +732,13 @@ 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));
+	opte = *pte;
 	*pte = npte;
+
+	if (pte_test(pte, PG_V) && opte != npte) {
+		/* XXX dcache wbinv?  */
+		pmap_update_page(kernel_pmap, va, npte);
+	}
 }
 
 /*


More information about the svn-src-user mailing list