summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorJoshua Hoke2010-10-25 03:44:22 +0200
committerDavid S. Miller2010-10-25 21:14:11 +0200
commitb336369c1e1ad88495895260a9068eb18bc48b6c (patch)
tree3ae8bbf24949584c521ac8bf0755c2eb1b970b97 /fs
parentbe2net: Fix CSO for UDP packets (diff)
downloadkernel-qcow2-linux-b336369c1e1ad88495895260a9068eb18bc48b6c.tar.gz
kernel-qcow2-linux-b336369c1e1ad88495895260a9068eb18bc48b6c.tar.xz
kernel-qcow2-linux-b336369c1e1ad88495895260a9068eb18bc48b6c.zip
macb: Don't re-enable interrupts while in polling mode
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: Joshua Hoke <joshua.hoke@sixnet.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs')
0 files changed, 0 insertions, 0 deletions