Commit:     b57bd06655a028aba7b92e1c19c2093e7fcfb341
Parent:     99a3eb3845f034eb55640a3da73e5e28349678c6
Author:     Ingo Molnar <[EMAIL PROTECTED]>
AuthorDate: Tue Dec 12 13:49:35 2006 +0100
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Dec 12 08:10:44 2006 -0800

    [PATCH] net, 8139too.c: fix netpoll deadlock
    fix deadlock in the 8139too driver: poll handlers should never forcibly
    enable local interrupts, because they might be used by netpoll/printk
    from IRQ context.
      [ INFO: inconsistent lock state ]
      2.6.19 #11
      inconsistent {softirq-on-W} -> {in-softirq-W} usage.
      swapper/1 [HC0[0]:SC1[1]:HE1:SE0] takes:
       (&npinfo->poll_lock){-+..}, at: [<c0350a41>] net_rx_action+0x64/0x1de
      {softirq-on-W} state was registered at:
        [<c0134c86>] mark_lock+0x5b/0x39c
        [<c0135012>] mark_held_locks+0x4b/0x68
        [<c01351e9>] trace_hardirqs_on+0x115/0x139
        [<c02879e6>] rtl8139_poll+0x3d7/0x3f4
        [<c035c85d>] netpoll_poll+0x82/0x32f
        [<c035c775>] netpoll_send_skb+0xc9/0x12f
        [<c035cdcc>] netpoll_send_udp+0x253/0x25b
        [<c0288463>] write_msg+0x40/0x65
        [<c011cead>] __call_console_drivers+0x45/0x51
        [<c011cf16>] _call_console_drivers+0x5d/0x61
        [<c011d4fb>] release_console_sem+0x11f/0x1d8
        [<c011d7d7>] register_console+0x1ac/0x1b3
        [<c02883f8>] init_netconsole+0x55/0x67
        [<c010040c>] init+0x9a/0x24e
        [<c01049cf>] kernel_thread_helper+0x7/0x10
        [<ffffffff>] 0xffffffff
      irq event stamp: 819992
      hardirqs last  enabled at (819992): [<c0350a16>] net_rx_action+0x39/0x1de
      hardirqs last disabled at (819991): [<c0350b1e>] net_rx_action+0x141/0x1de
      softirqs last  enabled at (817552): [<c01214e4>] __do_softirq+0xa3/0xa8
      softirqs last disabled at (819987): [<c0106051>] do_softirq+0x5b/0xc9
      other info that might help us debug this:
      no locks held by swapper/1.
      stack backtrace:
       [<c0104d88>] dump_trace+0x63/0x1e8
       [<c0104f26>] show_trace_log_lvl+0x19/0x2e
       [<c010532d>] show_trace+0x12/0x14
       [<c0105343>] dump_stack+0x14/0x16
       [<c0134980>] print_usage_bug+0x23c/0x246
       [<c0134d33>] mark_lock+0x108/0x39c
       [<c01356a7>] __lock_acquire+0x361/0x9ed
       [<c0136018>] lock_acquire+0x56/0x72
       [<c03aff1f>] _spin_lock+0x35/0x42
       [<c0350a41>] net_rx_action+0x64/0x1de
       [<c0121493>] __do_softirq+0x52/0xa8
       [<c0106051>] do_softirq+0x5b/0xc9
       [<c0121338>] irq_exit+0x3c/0x48
       [<c0106163>] do_IRQ+0xa4/0xbd
       [<c01047c6>] common_interrupt+0x2e/0x34
       [<c011db92>] vprintk+0x2c0/0x309
       [<c011dbf6>] printk+0x1b/0x1d
       [<c01003f2>] init+0x80/0x24e
       [<c01049cf>] kernel_thread_helper+0x7/0x10
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Acked-by: Jeff Garzik <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 drivers/net/8139too.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
index 931028f..35ad5cf 100644
--- a/drivers/net/8139too.c
+++ b/drivers/net/8139too.c
@@ -2131,14 +2131,15 @@ static int rtl8139_poll(struct net_device *dev, int 
        if (done) {
+               unsigned long flags;
                 * Order is important since data can get interrupted
                 * again when we think we are done.
-               local_irq_disable();
+               local_irq_save(flags);
                RTL_W16_F(IntrMask, rtl8139_intr_mask);
-               local_irq_enable();
+               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

Reply via email to