aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
authorSergei Shtylyov <sshtylyov@ru.mvista.com>2007-04-28 23:57:37 -0400
committerDavid S. Miller <davem@davemloft.net>2007-04-28 23:57:37 -0400
commit5f286e113fa377e50bd18fc45e5a0d4d83f6950c (patch)
treeb55cc97345990a22a6ef94a1775491d5fc68525c /include/linux/netdevice.h
parentb9099ff63c75216d6ca10bce5a1abcd9293c27e6 (diff)
[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>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r--include/linux/netdevice.h8
1 files changed, 3 insertions, 5 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index e027a3750a77..24cef42f1e0f 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -654,8 +654,10 @@ static inline void netif_start_queue(struct net_device *dev)
654static inline void netif_wake_queue(struct net_device *dev) 654static inline void netif_wake_queue(struct net_device *dev)
655{ 655{
656#ifdef CONFIG_NETPOLL_TRAP 656#ifdef CONFIG_NETPOLL_TRAP
657 if (netpoll_trap()) 657 if (netpoll_trap()) {
658 clear_bit(__LINK_STATE_XOFF, &dev->state);
658 return; 659 return;
660 }
659#endif 661#endif
660 if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state)) 662 if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
661 __netif_schedule(dev); 663 __netif_schedule(dev);
@@ -663,10 +665,6 @@ static inline void netif_wake_queue(struct net_device *dev)
663 665
664static inline void netif_stop_queue(struct net_device *dev) 666static inline void netif_stop_queue(struct net_device *dev)
665{ 667{
666#ifdef CONFIG_NETPOLL_TRAP
667 if (netpoll_trap())
668 return;
669#endif
670 set_bit(__LINK_STATE_XOFF, &dev->state); 668 set_bit(__LINK_STATE_XOFF, &dev->state);
671} 669}
672 670