mirror of https://github.com/torvalds/linux.git
The NETPOLL API requires that interrupts remain disabled in
netpoll_send_skb(). The use of spin_lock_irq() and spin_unlock_irq()
in the NETPOLL API callbacks causes the interrupts to get enabled and
can lead to kernel instability.
The solution is to use spin_lock_irqsave() and spin_unlock_restore()
to prevent the irqs from getting enabled while in netpoll_send_skb().
Call trace:
netpoll_send_skb()
{
-> local_irq_save(flags)
---> dev->ndo_start_xmit(skb, dev)
---> spin_lock_irq()
---> spin_unlock_irq() *******here would enable the interrupt.
...
-> local_irq_restore(flags)
}
Signed-off-by: Dongdong Deng <dongdong.deng@windriver.com>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Acked-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Acked-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|---|---|---|
| .. | ||
| 21142.c | ||
| Kconfig | ||
| Makefile | ||
| de4x5.c | ||
| de4x5.h | ||
| de2104x.c | ||
| dmfe.c | ||
| eeprom.c | ||
| interrupt.c | ||
| media.c | ||
| pnic.c | ||
| pnic2.c | ||
| timer.c | ||
| tulip.h | ||
| tulip_core.c | ||
| uli526x.c | ||
| winbond-840.c | ||
| xircom_cb.c | ||