Subject: Re: Bug in x86 ioapic interrupt code for devices with shared interrupts?
To: Thor Lancelot Simon <tls@rek.tjls.com>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: tech-kern
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 <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--