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
Nate Lawson
nate at root.org
Tue Nov 20 20:59:49 PST 2007
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 at .
--
Nate
More information about the cvs-src
mailing list