diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index 156d7fd81fec1829edd5bbe178c3179db79c1005..a01abdd2d3eaa93dce2414b450df3d2c0b685895 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)
 	/* don't get messages out of order, and no recursion */
 	if (skb_queue_len(&npinfo->txq) == 0 &&
 		    npinfo->poll_owner != smp_processor_id()) {
-		local_bh_disable();	/* Where's netif_tx_trylock_bh()? */
+		unsigned long flags;
+
+		local_irq_save(flags);
 		if (netif_tx_trylock(dev)) {
 			/* try until next clock tick */
 			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)
 			}
 			netif_tx_unlock(dev);
 		}
-		local_bh_enable();
+		local_irq_restore(flags);
 	}
 
 	if (status != NETDEV_TX_OK) {