• Matt Carlson's avatar
    tg3: Allow screaming interrupt detection · 624f8e50
    Matt Carlson authored
    The tg3 driver's ISR is coded to accept interrupts as its own if the
    status block tag does not equal the last tag the driver has seen.  The
    last_tag field is updated from tg3_poll.  In a screaming interrupt
    situation from another device sharing tg3's IRQ, tg3_poll does not get
    a chance to be called, so the last_tag will always be out of sync with
    the status block tag.  Consequently, the driver will continually
    declare the screaming interrupts as its own, thus thwarting the
    screaming interrupt detection logic.
    
    This patch solves the problem by creating a new last_irq_tag member and
    recording the status block tag in the ISR.  The ISR then checks the
    last_irq_tag for interrupt ownership.
    
    Many thanks to John Marvin for the detailed bug report and analysis and
    Michael Chan for the bugfix.
    Signed-off-by: default avatarMatt Carlson <mcarlson@broadcom.com>
    Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
    Tested-by: default avatarJohn Marvin <jsm@fc.hp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    624f8e50
tg3.c 360 KB