Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Nov 2007 20:59:42 -0800
From:      Nate Lawson <nate@root.org>
To:        Scott Long <scottl@FreeBSD.org>
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
Message-ID:  <4743BB3E.80205@root.org>
In-Reply-To: <20071121040355.62A5216A5AF@hub.freebsd.org>
References:  <20071121040355.62A5216A5AF@hub.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



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