• Benjamin Herrenschmidt's avatar
    [PATCH] ppc32: Fix problem with spurrious edge interrupts on old · 7588ab97
    Benjamin Herrenschmidt authored
    On old powermacs, it's possible that we get a stale edge interrupt when
    doing request_irq(), that typically happens with the DBDMA controller
    interrupts when the device was used by the firmware for booting.
    
    I just tracked down a nasty memory corruption problem where that was
    causing the bmac driver to try to process packets before the driver
    internal data structures were properly initialized.
    
    While I agree that the driver should (and will) be made more robust to
    such things, Paulus and I decided that it makes little sense to keep
    track of an "old" edge interrupt that happens before a driver does
    request_irq.  (On those powermacs, those are only the DBDMA interrupts
    anyway, and none of the DBDMA users will care). 
    
    This patch implements a "startup" handler for the old Apple PIC that
    will "ack" pending edge interrupts before unmasking, thus preventing
    those stale interrupts to be delivered.
    
    It also "fixes" the ppc32 irq core to call the startup() callback when
    available instead of just calling enable().
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    7588ab97
irq.c 17.6 KB