diff options
-rw-r--r-- | net/core/netpoll.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 156d7fd81fec..a01abdd2d3ea 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -243,7 +243,9 @@ static void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) | |||
243 | /* don't get messages out of order, and no recursion */ | 243 | /* don't get messages out of order, and no recursion */ |
244 | if (skb_queue_len(&npinfo->txq) == 0 && | 244 | if (skb_queue_len(&npinfo->txq) == 0 && |
245 | npinfo->poll_owner != smp_processor_id()) { | 245 | npinfo->poll_owner != smp_processor_id()) { |
246 | local_bh_disable(); /* Where's netif_tx_trylock_bh()? */ | 246 | unsigned long flags; |
247 | |||
248 | local_irq_save(flags); | ||
247 | if (netif_tx_trylock(dev)) { | 249 | if (netif_tx_trylock(dev)) { |
248 | /* try until next clock tick */ | 250 | /* try until next clock tick */ |
249 | for (tries = jiffies_to_usecs(1)/USEC_PER_POLL; | 251 | for (tries = jiffies_to_usecs(1)/USEC_PER_POLL; |
@@ -261,7 +263,7 @@ static void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) | |||
261 | } | 263 | } |
262 | netif_tx_unlock(dev); | 264 | netif_tx_unlock(dev); |
263 | } | 265 | } |
264 | local_bh_enable(); | 266 | local_irq_restore(flags); |
265 | } | 267 | } |
266 | 268 | ||
267 | if (status != NETDEV_TX_OK) { | 269 | if (status != NETDEV_TX_OK) { |