• J
    macb: Don't re-enable interrupts while in polling mode · b336369c
    Joshua Hoke 提交于
    On a busy network, the macb driver could get stuck in the interrupt
    handler, quickly triggering the watchdog, due to a confluence of
    factors:
    
     1. macb_poll re-enables interrupts unconditionally, even when it will
        be called again because it exhausted its rx budget
    
     2. macb_interrupt only disables interrupts after scheduling
        macb_poll, but scheduling fails when macb_poll is already scheduled
        because it didn't call napi_complete
    
     3. macb_interrupt loops until the interrupt status register is clear,
        which will never happen in this case if the driver doesn't disable
        the RX interrupt
    
    Since macb_interrupt runs in interrupt context, this effectively locks
    up the machine, triggering the hardware watchdog.
    
    This issue was readily reproducible on a flooded network with a
    modified 2.6.27.48 kernel. The same problem appears to still be in the
    2.6.36-rc8 driver code, so I am submitting this patch against that
    version. I have not tested this version of the patch except to make
    sure the kernel compiles.
    Signed-off-by: NJoshua Hoke <joshua.hoke@sixnet.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    b336369c
macb.c 32.0 KB