Messages in this thread Patch in this message | | | Date | Tue, 19 Aug 2008 01:03:07 -0700 | From | Andrew Morton <> | Subject | Re: latest -git: kernel hangs when pulling the plug on 8139too |
| |
On Tue, 12 Aug 2008 22:54:31 +0200 "Vegard Nossum" <vegard.nossum@gmail.com> wrote:
> Oops, I spoke a bit too soon. > > On Tue, Aug 12, 2008 at 10:46 PM, Vegard Nossum <vegard.nossum@gmail.com> wrote: > > [<c0119b05>] nmi_watchdog_tick+0x1d5/0x1e0 > > [<c0106217>] do_nmi+0x97/0x2d0 > > [<c0591f03>] nmi_stack_correct+0x26/0x2b > > [<c028007b>] ? as_remove_queued_request+0x9b/0xb0 > > [<c028a218>] ? delay_tsc+0x98/0xb8 > > [<c028a0b9>] __delay+0x9/0x10 > > [<c0299579>] _raw_spin_lock+0xb9/0x140 > > [<c015623b>] ? trace_hardirqs_off+0xb/0x10 > > [<c05916b6>] _spin_lock_irqsave+0x76/0x90 > > [<c035b255>] ? rtl8139_start_xmit+0x65/0x130 > > [<c035b255>] rtl8139_start_xmit+0x65/0x130 > > Acquires &tp->lock. > > > [<c04c5e28>] netpoll_send_skb+0x158/0x1a0 > > [<c04c62fb>] netpoll_send_udp+0x1db/0x1f0 > > [<c037c70c>] write_msg+0x8c/0xc0 > > [<c0135883>] __call_console_drivers+0x53/0x60 > > [<c01358db>] _call_console_drivers+0x4b/0x90 > > [<c0135a25>] release_console_sem+0xc5/0x1f0 > > [<c0135f0b>] vprintk+0x1ab/0x3e0 > > [<c0591acc>] ? _spin_unlock_irqrestore+0x6c/0x70 > > [<c01460e1>] ? __queue_work+0x31/0x40 > > [<c01461e5>] ? queue_work+0x45/0x50 > > [<c014629f>] ? queue_delayed_work+0xf/0x30 > > [<c0591aa3>] ? _spin_unlock_irqrestore+0x43/0x70 > > [<c01462d1>] ? schedule_delayed_work+0x11/0x20 > > [<c013615b>] printk+0x1b/0x20 > > [<c0349736>] mii_check_media+0x196/0x1e0 > > [<c059127b>] ? _spin_lock+0x5b/0x70 > > [<c03597f4>] rtl_check_media+0x24/0x30 > > [<c035a0ea>] rtl8139_interrupt+0x42a/0x4a0 > > Acquires &tp->lock. > > > [<c01716d8>] handle_IRQ_event+0x28/0x70 > > [<c0172d9b>] handle_fasteoi_irq+0x6b/0xe0 > > [<c0107128>] do_IRQ+0x48/0xa0 > > [<c028a604>] ? trace_hardirqs_off_thunk+0xc/0x18 > > [<c0104a5c>] common_interrupt+0x28/0x30 > > [<c015007b>] ? update_wall_time+0x36b/0x7d0 > > [<c010ae8c>] ? mwait_idle+0x3c/0x50 > > [<c010285c>] cpu_idle+0x6c/0x120 > > [<c056bb32>] rest_init+0x62/0x70 > > ======================= > > <4>---[ end trace 33bf576b6277932f ]--- > > > > ...this seems to contain at least a little bit of useful information. > > > > Looks to me like it's quite simply a recursive printk. I don't > > understand why the printk code doesn't catch this, though. > > Nope. It tries to take a lock that is already held. Instead: How can > it be solved? >
Not doing a printk while holding the lock which will block the printk is one way:
--- a/drivers/net/8139too.c~a +++ a/drivers/net/8139too.c @@ -1358,7 +1358,7 @@ static void rtl_check_media (struct net_ struct rtl8139_private *tp = netdev_priv(dev); if (tp->phys[0] >= 0) { - mii_check_media(&tp->mii, netif_msg_link(tp), init_media); + mii_check_media(&tp->mii, 0, init_media); } } _ however it might be smarter to disable NETIF_MSG_LINK on that interface if it is being used for netconsole.
| |