diff options
author | Joshua Hoke <Joshua.Hoke@sixnet.com> | 2010-10-25 01:44:22 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-10-25 12:14:11 -0700 |
commit | b336369c1e1ad88495895260a9068eb18bc48b6c (patch) | |
tree | 3ae8bbf24949584c521ac8bf0755c2eb1b970b97 /sound/soc/nuc900 | |
parent | c6ce2f4b270cb1d4d6b6f4f692a12ca2fea13f3f (diff) | |
download | kernel_samsung_espresso10-b336369c1e1ad88495895260a9068eb18bc48b6c.zip kernel_samsung_espresso10-b336369c1e1ad88495895260a9068eb18bc48b6c.tar.gz kernel_samsung_espresso10-b336369c1e1ad88495895260a9068eb18bc48b6c.tar.bz2 |
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 'sound/soc/nuc900')
0 files changed, 0 insertions, 0 deletions