Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Dec 2002 14:27:11 +1100
From:      Tim Robbins <tjr@FreeBSD.org>
To:        Brian Fundakowski Feldman <green@FreeBSD.org>
Cc:        current@FreeBSD.org
Subject:   Re: fincore.c strikes again (panic bremfree: bp not locked)
Message-ID:  <20021213142711.A58197@dilbert.robbins.dropbear.id.au>
In-Reply-To: <200212130020.gBD0KFWg000827@green.bikeshed.org>; from green@FreeBSD.org on Thu, Dec 12, 2002 at 07:20:15PM -0500
References:  <200212130020.gBD0KFWg000827@green.bikeshed.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Here's a proposed patch for this problem:


Index: src/sys/i386/i386/pmap.c
===================================================================
RCS file: /x/freebsd/src/sys/i386/i386/pmap.c,v
retrieving revision 1.376
diff -u -r1.376 pmap.c
--- src/sys/i386/i386/pmap.c	3 Dec 2002 04:00:42 -0000	1.376
+++ src/sys/i386/i386/pmap.c	13 Dec 2002 02:54:44 -0000
@@ -3300,7 +3300,7 @@
 {
 	pt_entry_t *ptep, pte;
 	vm_page_t m;
-	int val = 0;
+	int refd, val = 0;
 	
 	ptep = pmap_pte(pmap, addr);
 	if (ptep == 0) {
@@ -3337,9 +3337,17 @@
 		/*
 		 * Referenced by someone
 		 */
-		else if ((m->flags & PG_REFERENCED) || pmap_ts_referenced(m)) {
+		else if (m->flags & PG_REFERENCED) {
 			val |= MINCORE_REFERENCED_OTHER;
 			vm_page_flag_set(m, PG_REFERENCED);
+		} else {
+			vm_page_lock_queues();
+			refd = pmap_ts_referenced(m);
+			vm_page_unlock_queues();
+			if (refd) {
+				val |= MINCORE_REFERENCED_OTHER;
+				vm_page_flag_set(m, PG_REFERENCED);
+			}
 		}
 	} 
 	return val;

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021213142711.A58197>