Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Apr 2003 12:27:15 -0500 (EST)
From:      Andrew Gallatin <gallatin@cs.duke.edu>
To:        Nate Lawson <nate@root.org>
Cc:        current@freebsd.org
Subject:   Re: mbuf LOR
Message-ID:  <16013.49267.867140.38329@grasshopper.cs.duke.edu>
In-Reply-To: <Pine.BSF.4.21.0304040001330.15815-100000@root.org>
References:  <16012.32534.331966.216694@grasshopper.cs.duke.edu> <Pine.BSF.4.21.0304040001330.15815-100000@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help

Nate Lawson writes:
 > You're right about where the problem is (top of stack trace and listing 
 > below).  However, your patch causes an immediate panic on boot due to a 
 > NULL deref.  I don't think you want it to always return NULL if called 
 > with M_NOWAIT set.  :)  Other ideas?

The following patch boots & passed the basic 'make -j16 buildworld'
test on x86 SMP.  As I outlined before, I'm not certain if it is safe
on all platforms.

I'm really eager to see your fxp locking diffs.  Even if you're not
comfortable sharing them with the world yet, I'd be interested in
helping out on this.

Drew


Index: vm/uma_core.c
===================================================================
RCS file: /home/ncvs/src/sys/vm/uma_core.c,v
retrieving revision 1.51
diff -u -r1.51 uma_core.c
--- vm/uma_core.c	26 Mar 2003 18:44:53 -0000	1.51
+++ vm/uma_core.c	4 Apr 2003 15:11:34 -0000
@@ -703,10 +703,15 @@
 		wait &= ~M_ZERO;
 
 	if (booted || (zone->uz_flags & UMA_ZFLAG_PRIVALLOC)) {
-		mtx_lock(&Giant);
-		mem = zone->uz_allocf(zone, 
-		    zone->uz_ppera * UMA_SLAB_SIZE, &flags, wait);
-		mtx_unlock(&Giant);
+		if ((wait & M_NOWAIT) == 0) {
+			mtx_lock(&Giant);
+			mem = zone->uz_allocf(zone, 
+			    zone->uz_ppera * UMA_SLAB_SIZE, &flags, wait);
+			mtx_unlock(&Giant);
+		} else {
+			mem = zone->uz_allocf(zone, 
+			    zone->uz_ppera * UMA_SLAB_SIZE, &flags, wait);
+		}
 		if (mem == NULL) {
 			ZONE_LOCK(zone);
 			return (NULL);




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