svn commit: r267408 - head/sys/arm/arm

John-Mark Gurney jmg at FreeBSD.org
Thu Jun 12 16:31:16 UTC 2014


Author: jmg
Date: Thu Jun 12 16:31:15 2014
New Revision: 267408
URL: http://svnweb.freebsd.org/changeset/base/267408

Log:
  clear the write bit...   This allows my AVILA board to survive a
  portsnap extract, where previously it would panic..  clearly someone
  who knows pmap should optimize this code per alc's comment...
  
  Submitted by:	alc
  MFC after:	probably

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

Modified: head/sys/arm/arm/pmap.c
==============================================================================
--- head/sys/arm/arm/pmap.c	Thu Jun 12 16:26:26 2014	(r267407)
+++ head/sys/arm/arm/pmap.c	Thu Jun 12 16:31:15 2014	(r267408)
@@ -3034,7 +3034,14 @@ pmap_remove_all(vm_page_t m)
 	if (TAILQ_EMPTY(&m->md.pv_list))
 		return;
 	rw_wlock(&pvh_global_lock);
-	pmap_remove_write(m);
+
+	/*
+	 * XXX This call shouldn't exist.  Iterating over the PV list twice,
+	 * once in pmap_clearbit() and again below, is both unnecessary and
+	 * inefficient.  The below code should itself write back the cache
+	 * entry before it destroys the mapping.
+	 */
+	pmap_clearbit(m, PVF_WRITE);
 	curpm = vmspace_pmap(curproc->p_vmspace);
 	while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) {
 		if (flush == FALSE && (pv->pv_pmap == curpm ||
@@ -3043,7 +3050,7 @@ pmap_remove_all(vm_page_t m)
 
 		PMAP_LOCK(pv->pv_pmap);
 		/*
-		 * Cached contents were written-back in pmap_remove_write(),
+		 * Cached contents were written-back in pmap_clearbit(),
 		 * but we still have to invalidate the cache entry to make
 		 * sure stale data are not retrieved when another page will be
 		 * mapped under this virtual address.


More information about the svn-src-head mailing list