From owner-svn-src-all@FreeBSD.ORG Mon May 10 18:33:04 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A273F1065670; Mon, 10 May 2010 18:33:04 +0000 (UTC) (envelope-from marius@alchemy.franken.de) Received: from alchemy.franken.de (alchemy.franken.de [194.94.249.214]) by mx1.freebsd.org (Postfix) with ESMTP id 1DB538FC1B; Mon, 10 May 2010 18:33:03 +0000 (UTC) Received: from alchemy.franken.de (localhost [127.0.0.1]) by alchemy.franken.de (8.14.3/8.14.3/ALCHEMY.FRANKEN.DE) with ESMTP id o4AIX273032583; Mon, 10 May 2010 20:33:02 +0200 (CEST) (envelope-from marius@alchemy.franken.de) Received: (from marius@localhost) by alchemy.franken.de (8.14.3/8.14.3/Submit) id o4AIX2YR032582; Mon, 10 May 2010 20:33:02 +0200 (CEST) (envelope-from marius) Date: Mon, 10 May 2010 20:33:02 +0200 From: Marius Strobl To: Attilio Rao Message-ID: <20100510183302.GC43981@alchemy.franken.de> References: <201004192327.o3JNRsK4047856@svn.freebsd.org> <20100509170414.GA35602@alchemy.franken.de> Mime-Version: 1.0 Content-Type: text/plain; charset=unknown-8bit Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.4.2.3i Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r206878 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 May 2010 18:33:04 -0000 On Mon, May 10, 2010 at 12:27:40AM +0200, Attilio Rao wrote: > 2010/5/9 Marius Strobl : > > On Mon, Apr 19, 2010 at 11:27:54PM +0000, Attilio Rao wrote: > >> Author: attilio > >> Date: Mon Apr 19 23:27:54 2010 > >> New Revision: 206878 > >> URL: http://svn.freebsd.org/changeset/base/206878 > >> > >> Log: > >>   Fix a deadlock in the shutdown code: > >>   When performing a smp_rendezvous() or more likely, on amd64 and i386, > >>   a smp_tlb_shootdown() the caller will end up with the smp_ipi_mtx > >>   spinlock held, busy-waiting for other CPUs to acknowledge the operation. > >>   As long as CPUs are suspended (via cpu_reset()) between the active mask > >>   read and IPI sending there can be a deadlock where the caller will wait > >>   forever for a dead CPU to acknowledge the operation. > >>   Please note that on CPU0 that is going to be someway heavier because of > >>   the spinlocks being disabled earlier than quitting the machine. > >> > >>   Fix this bug by calling cpu_reset() with the smp_ipi_mtx held. > >>   Note that it is very likely that a saner offline/online CPUs mechanism > >>   will help heavilly in fixing similar cases as it is likely more bugs > >>   of this type may arise in the future. > >> > > > > This change causes a hang for me when running an SMP kernel on an > > UP machine or an MP machine with SMP disabled as in these cases > > smp_ipi_mtx isn't initialized (see mp_start()). The below patch > > fixes this for me. > > Marius, > thanks a lot for reporting this. > However, I think that a better fix is to always initialize the mutex. > Do you think the following patch is fine for you?: > http://www.freebsd.org/~attilio/smpipi_fixup.diff > Yes, this fixes it as well. Marius