From owner-cvs-all@FreeBSD.ORG Wed Nov 21 04:59:49 2007 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7A61016A469 for ; Wed, 21 Nov 2007 04:59:49 +0000 (UTC) (envelope-from nate@root.org) Received: from root.org (root.org [67.118.192.226]) by mx1.freebsd.org (Postfix) with ESMTP id 4EDC813C508 for ; Wed, 21 Nov 2007 04:59:48 +0000 (UTC) (envelope-from nate@root.org) Received: (qmail 45054 invoked from network); 21 Nov 2007 04:59:49 -0000 Received: from ppp-71-139-1-224.dsl.snfc21.pacbell.net (HELO ?10.0.5.18?) (nate-mail@71.139.1.224) by root.org with ESMTPA; 21 Nov 2007 04:59:49 -0000 Message-ID: <4743BB3E.80205@root.org> Date: Tue, 20 Nov 2007 20:59:42 -0800 From: Nate Lawson User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: Scott Long References: <20071121040355.62A5216A5AF@hub.freebsd.org> In-Reply-To: <20071121040355.62A5216A5AF@hub.freebsd.org> X-Enigmail-Version: 0.95.5 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: cvs-src@freebsd.org, src-committers@FreeBSD.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/amd64/amd64 intr_machdep.c src/sys/i386/i386 intr_machdep.c src/sys/ia64/ia64 interrupt.c src/sys/powerpc/powerpc intr_machdep.c src/sys/sparc64/sparc64 intr_machdep.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Nov 2007 04:59:49 -0000 Scott Long wrote: > scottl 2007-11-21 04:03:51 UTC > > FreeBSD src repository > > Modified files: > sys/amd64/amd64 intr_machdep.c > sys/i386/i386 intr_machdep.c > sys/ia64/ia64 interrupt.c > sys/powerpc/powerpc intr_machdep.c > sys/sparc64/sparc64 intr_machdep.c > Log: > Extend critical section coverage in the low-level interrupt handlers to > include the ithread scheduling step. Without this, a preemption might > occur in between the interrupt getting masked and the ithread getting > scheduled. Since the interrupt handler runs in the context of curthread, > the scheudler might see it as having a such a low priority on a busy system > that it doesn't get to run for a _long_ time, leaving the interrupt stranded > in a disabled state. The only way that the preemption can happen is by > a fast/filter handler triggering a schduling event earlier in the handler, > so this problem can only happen for cases where an interrupt is being > shared by both a fast/filter handler and an ithread handler. Unfortunately, > it seems to be common for this sharing to happen with network and USB > devices, for example. This fixes many of the mysterious TCP session > timeouts and NIC watchdogs that were being reported. Many thanks to Sam > Lefler for getting to the bottom of this problem. > > Reviewed by: jhb, jeff, silby > > Revision Changes Path > 1.35 +1 -1 src/sys/amd64/amd64/intr_machdep.c > 1.30 +1 -1 src/sys/i386/i386/intr_machdep.c > 1.62 +1 -1 src/sys/ia64/ia64/interrupt.c > 1.14 +1 -1 src/sys/powerpc/powerpc/intr_machdep.c > 1.28 +1 -1 src/sys/sparc64/sparc64/intr_machdep.c Horrible bug, thank you to you and Sam! Maybe this will fix some other preemption issues reported to me by bde@. -- Nate