Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3640543df26fd38f31f0c6decc35c07be2a6307c
Commit:     3640543df26fd38f31f0c6decc35c07be2a6307c
Parent:     d224a93d91610fc641fbc5b234b32fcb84045a30
Author:     Ingo Molnar <[EMAIL PROTECTED]>
AuthorDate: Tue Dec 12 17:20:42 2006 +0100
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Dec 12 08:37:51 2006 -0800

    [PATCH] netpoll: fix netpoll lockup
    
    current -git doesnt boot on my laptop due to netpoll not unlocking the
    tx lock in the else branch.
    
    booted this up on my laptop with lockdep enabled and there are no
    locking complaints and it works fine.
    
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 net/core/netpoll.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index a01abdd..823215d 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -55,6 +55,7 @@ static void queue_process(struct work_struct *work)
        struct netpoll_info *npinfo =
                container_of(work, struct netpoll_info, tx_work.work);
        struct sk_buff *skb;
+       unsigned long flags;
 
        while ((skb = skb_dequeue(&npinfo->txq))) {
                struct net_device *dev = skb->dev;
@@ -64,15 +65,19 @@ static void queue_process(struct work_struct *work)
                        continue;
                }
 
-               netif_tx_lock_bh(dev);
+               local_irq_save(flags);
+               netif_tx_lock(dev);
                if (netif_queue_stopped(dev) ||
                    dev->hard_start_xmit(skb, dev) != NETDEV_TX_OK) {
                        skb_queue_head(&npinfo->txq, skb);
-                       netif_tx_unlock_bh(dev);
+                       netif_tx_unlock(dev);
+                       local_irq_restore(flags);
 
                        schedule_delayed_work(&npinfo->tx_work, HZ/10);
                        return;
                }
+               netif_tx_unlock(dev);
+               local_irq_restore(flags);
        }
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to