From owner-freebsd-current@FreeBSD.ORG Fri Apr 4 09:27:22 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 61F7437B401 for ; Fri, 4 Apr 2003 09:27:22 -0800 (PST) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id 94C4B43F75 for ; Fri, 4 Apr 2003 09:27:21 -0800 (PST) (envelope-from gallatin@cs.duke.edu) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.12.9/8.12.9) with ESMTP id h34HRLMS009404 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 4 Apr 2003 12:27:21 -0500 (EST) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.11.6/8.9.1) id h34HRFi34160; Fri, 4 Apr 2003 12:27:15 -0500 (EST) (envelope-from gallatin@cs.duke.edu) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16013.49267.867140.38329@grasshopper.cs.duke.edu> Date: Fri, 4 Apr 2003 12:27:15 -0500 (EST) To: Nate Lawson In-Reply-To: References: <16012.32534.331966.216694@grasshopper.cs.duke.edu> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid cc: current@freebsd.org Subject: Re: mbuf LOR X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Apr 2003 17:27:22 -0000 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);