[NETPOLL]: Fix TX queue overflow in trapped mode.
CONFIG_NETPOLL_TRAP causes the TX queue controls to be completely bypassed in the netpoll's "trapped" mode which easily causes overflows in the drivers with short TX queues (most notably, in 8139too with its 4-deep queue). So, make this option more sensible by making it only bypass the TX softirq wakeup. Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Acked-by: Jeff Garzik <jgarzik@pobox.com> Acked-by: Tom Rini <trini@kernel.crashing.org> Acked-by: Matt Mackall <mpm@selenic.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Adrian Bunk <bunk@stusta.de>
This commit is contained in:
committed by
Adrian Bunk
parent
57b0c610b8
commit
eb9c87a476
@@ -623,8 +623,10 @@ static inline void netif_start_queue(struct net_device *dev)
|
||||
static inline void netif_wake_queue(struct net_device *dev)
|
||||
{
|
||||
#ifdef CONFIG_NETPOLL_TRAP
|
||||
if (netpoll_trap())
|
||||
if (netpoll_trap()) {
|
||||
clear_bit(__LINK_STATE_XOFF, &dev->state);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
|
||||
__netif_schedule(dev);
|
||||
@@ -632,10 +634,6 @@ static inline void netif_wake_queue(struct net_device *dev)
|
||||
|
||||
static inline void netif_stop_queue(struct net_device *dev)
|
||||
{
|
||||
#ifdef CONFIG_NETPOLL_TRAP
|
||||
if (netpoll_trap())
|
||||
return;
|
||||
#endif
|
||||
set_bit(__LINK_STATE_XOFF, &dev->state);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user