Subject: Re: Bug in x86 ioapic interrupt code for devices with shared interrupts?
To: Thor Lancelot Simon <firstname.lastname@example.org>
From: Manuel Bouyer <email@example.com>
Date: 03/03/2006 21:53:15
On Fri, Mar 03, 2006 at 03:03:05PM -0500, Thor Lancelot Simon wrote:
> On Fri, Mar 03, 2006 at 11:37:31AM -0800, Jonathan Stone wrote:
> > Yes, the interrupt handler in bge(4) (sys/dev/pci/if_bge.c:bge_intr())
> > is known to give an inaccurate return code. That problem can cause
> > interrupts to not be forwarded to other devices sharing the same IRQ.
> > This is a long-known bug in bge(4). However, every time I've tried
> > to turn on the
> > #ifdef notdef"
> > code in bge_intr(), the resulting kernel hung. If I had a
> > programmer's manual, I'd go looking for ways to ascertain if the bge
> > really interrupted.
> Leaving the other issues aside: why should the bge not always claim that
> the interrupt was _not_ for it? Because that would generate "spurious
> interrupt N" messages on the system console?
BTW, I still don't understand why a driver couldn't claim an interrupt
even if it didn't generate it. AFAIK in the i386 interrupt code nothing
uses the return value. This is in i386/vector.S, in INTRSTUB.
From what I understand in amd64/vector.S the return value is also ignored.
I'm probably missing something, but I fail to see what ...
Manuel Bouyer <firstname.lastname@example.org>
NetBSD: 26 ans d'experience feront toujours la difference