* netconsole system freeze when cable unplugged
@ 2007-03-09 19:35 Simon Arlott
2007-03-09 20:42 ` Francois Romieu
0 siblings, 1 reply; 7+ messages in thread
From: Simon Arlott @ 2007-03-09 19:35 UTC (permalink / raw)
To: Linux Kernel Mailing List; +Cc: netdev
When I unplug the cable the system just stops responding to anything,
at all. No message is printed to the console when the cable is plugged
back in.
[ 0.000000] Linux version 2.6.21-rc3 (byte@redrum) (gcc version 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)) #3 SMP Fri Mar 9 18:42:22 GMT 2007
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] sanitize start
[ 0.000000] sanitize bail 0
[ 0.000000] BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
[ 0.000000] BIOS-e801: 0000000000100000 - 000000000c000000 (usable)
[ 0.000000] 192MB LOWMEM available.
[ 0.000000] found SMP MP-table at 000fea90
[ 0.000000] Zone PFN ranges:
[ 0.000000] DMA 0 -> 4096
[ 0.000000] Normal 4096 -> 49152
[ 0.000000] early_node_map[1] active PFN ranges
[ 0.000000] 0: 0 -> 49152
[ 0.000000] DMI not present or invalid.
[ 0.000000] Intel MultiProcessor Specification v1.4
[ 0.000000] Virtual Wire compatibility mode.
[ 0.000000] OEM ID: COMPAQ Product ID: Workstation APIC at: 0xFEE00000
[ 0.000000] Processor #1 6:1 APIC version 16
[ 0.000000] Processor #0 6:1 APIC version 16
[ 0.000000] I/O APIC #8 Version 17 at 0xFEC00000.
[ 0.000000] Enabling APIC mode: Flat. Using 1 I/O APICs
[ 0.000000] Processors: 2
[ 0.000000] Allocating PCI resources starting at 10000000 (gap: 0c000000:f4000000)
[ 0.000000] Built 1 zonelists. Total pages: 48768
[ 0.000000] Kernel command line: netconsole=9@192.168.7.200/eth0,1649@192.168.7.255/ console=ttyS0,115200 ip=dhcp root=/dev/nfs init=/bin/bash panic=10
[ 0.000000] Initializing CPU#0
[ 0.000000] PID hash table entries: 1024 (order: 10, 4096 bytes)
[ 0.000000] Detected 199.444 MHz processor.
[ 485.111206] Console: colour dummy device 80x25
[ 486.218671] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 486.227388] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 486.234789] Pentium Pro with Errata#50 detected. Taking evasive action.
[ 486.346878] Memory: 189764k/196608k available (1268k kernel code, 6452k reserved, 492k data, 184k init, 0k highmem)
[ 486.357430] virtual kernel memory layout:
[ 486.357444] fixmap : 0xfffbc000 - 0xfffff000 ( 268 kB)
[ 486.357461] vmalloc : 0xcc800000 - 0xfffba000 ( 823 MB)
[ 486.357478] lowmem : 0xc0000000 - 0xcc000000 ( 192 MB)
[ 486.357494] .init : 0xc02bf000 - 0xc02ed000 ( 184 kB)
[ 486.357510] .data : 0xc023d32b - 0xc02b85d0 ( 492 kB)
[ 486.357527] .text : 0xc0100000 - 0xc023d32b (1268 kB)
[ 486.396031] Checking if this processor honours the WP bit even in supervisor mode... Ok.
[ 486.562667] Calibrating delay using timer specific routine.. 400.92 BogoMIPS (lpj=2004624)
[ 486.575064] Mount-cache hash table entries: 512
[ 486.587330] CPU: L1 I cache: 8K, L1 D cache: 8K
[ 486.591916] CPU: L2 cache: 256K
[ 486.595475] Checking 'hlt' instruction... OK.
[ 486.633415] Freeing SMP alternatives: 9k freed
[ 486.638843] CPU0: Intel Pentium Pro stepping 07
[ 486.644597] lockdep: not fixing up alternatives.
[ 486.649256] Booting processor 1/0 eip 2000
[ 486.664153] Initializing CPU#1
[ 486.812607] Calibrating delay using timer specific routine.. 398.91 BogoMIPS (lpj=1994559)
[ 486.812755] CPU: L1 I cache: 8K, L1 D cache: 8K
[ 486.812781] CPU: L2 cache: 256K
[ 486.813992] CPU1: Intel Pentium Pro stepping 07
[ 486.837731] Total of 2 processors activated (799.83 BogoMIPS).
[ 486.844201] ExtINT not setup in hardware but reported by MP table
[ 486.851035] ENABLING IO-APIC IRQs
[ 486.855772] ..TIMER: vector=0x31 apic1=0 pin1=2 apic2=0 pin2=0
[ 487.204372] checking TSC synchronization [CPU#0 -> CPU#1]: passed.
[ 487.230906] Brought up 2 CPUs
[ 487.888084] migration_cost=6769
[ 487.904092] NET: Registered protocol family 16
[ 487.927495] PCI: PCI BIOS revision 2.10 entry at 0xe07c4, last bus=1
[ 487.933936] PCI: Using configuration type 1
[ 487.938152] Setting up standard PCI resources
[ 487.951810] PCI: Probing PCI hardware
[ 487.959923] 0000:00:14.1: trying to change BAR0 from 0000 to 01F0
[ 487.966107] 0000:00:14.1: trying to change BAR1 from 0000 to 03F4
[ 487.972246] 0000:00:14.1: trying to change BAR2 from 0000 to 0170
[ 487.978418] 0000:00:14.1: trying to change BAR3 from 0000 to 0374
[ 487.993123] PCI->APIC IRQ transform: 0000:00:08.0[A] -> IRQ 19
[ 487.999018] PCI->APIC IRQ transform: 0000:00:0b.0[A] -> IRQ 16
[ 488.004987] PCI->APIC IRQ transform: 0000:01:0b.0[A] -> IRQ 20
[ 488.010870] PCI->APIC IRQ transform: 0000:01:0c.0[A] -> IRQ 21
[ 488.058792] PCI: Bridge: 0000:00:06.0
[ 488.062512] IO window: 1000-1fff
[ 488.065964] Time: tsc clocksource has been installed.
[ 488.071119] MEM window: 50000000-501fffff
[ 488.075398] PREFETCH window: 10000000-100fffff
[ 488.081935] NET: Registered protocol family 2
[ 488.173953] IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
[ 488.184036] TCP established hash table entries: 8192 (order: 6, 294912 bytes)
[ 488.204285] TCP bind hash table entries: 8192 (order: 6, 262144 bytes)
[ 488.223278] TCP: Hash tables configured (established 8192 bind 8192)
[ 488.229974] TCP reno registered
[ 488.285511] Limiting direct PCI/PCI transfers.
[ 488.334179] Real Time Clock Driver v1.12ac
[ 488.338328] Hangcheck: starting hangcheck timer 0.9.0 (tick is 180 seconds, margin is 60 seconds).
[ 488.347357] Hangcheck: Using get_cycles().
[ 488.351515] Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
[ 488.360916] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 488.367954] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 488.381717] 8139too Fast Ethernet driver 0.9.28
[ 488.389601] eth0: RealTek RTL8139 at 0x2400, 00:02:44:47:d3:ee, IRQ 19
[ 488.396487] netconsole: device eth0 not up yet, forcing it
[ 488.402923] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 488.423119] netconsole: carrier detect appears untrustworthy, waiting 100 ms
[ 489.684118] netconsole: network logging started
[ 489.688832] TCP cubic registered
[ 489.694506] NET: Registered protocol family 10
[ 489.711251] Starting balanced_irq
[ 489.715459] Using IPI Shortcut mode
[ 491.242277] Sending DHCP requests ., OK
[ 491.292256] IP-Config: Got DHCP answer from 192.168.7.4, my address is 192.168.7.200
[ 491.302672] IP-Config: Complete:
[ 491.305876] device=eth0, addr=192.168.7.200, mask=255.255.255.0, gw=192.168.7.4,
[ 491.314553] host=Compaq_PW5000, domain=lan, nis-domain=(none),
[ 491.321130] bootserver=192.168.7.4, rootserver=192.168.7.8, rootpath=/
[ 491.331337] Looking up port of RPC 100003/2 on 192.168.7.8
[ 491.344971] Looking up port of RPC 100005/1 on 192.168.7.8
[ 491.444880] VFS: Mounted root (nfs filesystem) readonly.
[ 491.453750] Freeing unused kernel memory: 184k freed
[ 491.459420] Write protecting the kernel read-only data: 346k
[ 565.518226] eth0: link down
--
Simon Arlott
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: netconsole system freeze when cable unplugged
2007-03-09 19:35 netconsole system freeze when cable unplugged Simon Arlott
@ 2007-03-09 20:42 ` Francois Romieu
2007-03-09 23:30 ` Simon Arlott
2007-03-10 20:31 ` Matt Mackall
0 siblings, 2 replies; 7+ messages in thread
From: Francois Romieu @ 2007-03-09 20:42 UTC (permalink / raw)
To: Simon Arlott; +Cc: Linux Kernel Mailing List, netdev
Simon Arlott <simon@fire.lp0.eu> :
> When I unplug the cable the system just stops responding to anything,
> at all. No message is printed to the console when the cable is plugged
> back in.
rtl8139_interrupt (spin_lock(&tp->lock))
-> rtl8139_weird_interrupt
-> rtl_check_media
-> mii_check_media (printk(KERN_INFO "%s: link down\n", ...))
[netpoll stuff here]
-> rtl8139_poll_controller
-> rtl8139_interrupt
*deadlock*
See below for my random stuff of the day. Feel free to open a PR at
bugzilla.kernel.org if the issue does not go away.
--------8<-----------------------------------------------------------------
8139too: netconsole breakage when link changes
rtl8139_interrupt is not supposed to be reentrant but its link
management part can emit printk.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
index 99304b2..64467ad 100644
--- a/drivers/net/8139too.c
+++ b/drivers/net/8139too.c
@@ -2215,9 +2215,16 @@ static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
*/
static void rtl8139_poll_controller(struct net_device *dev)
{
- disable_irq(dev->irq);
+ struct rtl8139_private *tp = netdev_priv(dev);
+ unsigned long flags;
+ int rc;
+
+ rc = spin_trylock_irqsave(&tp->lock, flags);
+ if (!rc)
+ return;
+ spin_unlock(&tp->lock);
rtl8139_interrupt(dev->irq, dev);
- enable_irq(dev->irq);
+ local_irq_restore(flags);
}
#endif
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: netconsole system freeze when cable unplugged
2007-03-09 20:42 ` Francois Romieu
@ 2007-03-09 23:30 ` Simon Arlott
2007-03-10 13:38 ` Andi Kleen
2007-03-10 20:31 ` Matt Mackall
1 sibling, 1 reply; 7+ messages in thread
From: Simon Arlott @ 2007-03-09 23:30 UTC (permalink / raw)
To: Francois Romieu; +Cc: Linux Kernel Mailing List, netdev
On 09/03/07 20:42, Francois Romieu wrote:
> Simon Arlott <simon@fire.lp0.eu> :
>> When I unplug the cable the system just stops responding to anything,
>> at all. No message is printed to the console when the cable is plugged
>> back in.
>
> rtl8139_interrupt (spin_lock(&tp->lock))
> -> rtl8139_weird_interrupt
> -> rtl_check_media
> -> mii_check_media (printk(KERN_INFO "%s: link down\n", ...))
> [netpoll stuff here]
> -> rtl8139_poll_controller
> -> rtl8139_interrupt
> *deadlock*
>
> See below for my random stuff of the day. Feel free to open a PR at
> bugzilla.kernel.org if the issue does not go away.
The patch doesn't fix it, nothing changes. I'm not sure how this can
be debugged if printk won't work...
> --------8<-----------------------------------------------------------------
>
> 8139too: netconsole breakage when link changes
>
> rtl8139_interrupt is not supposed to be reentrant but its link
> management part can emit printk.
>
> Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
>
> diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
> index 99304b2..64467ad 100644
> --- a/drivers/net/8139too.c
> +++ b/drivers/net/8139too.c
> @@ -2215,9 +2215,16 @@ static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance)
> */
> static void rtl8139_poll_controller(struct net_device *dev)
> {
> - disable_irq(dev->irq);
> + struct rtl8139_private *tp = netdev_priv(dev);
> + unsigned long flags;
> + int rc;
> +
> + rc = spin_trylock_irqsave(&tp->lock, flags);
> + if (!rc)
> + return;
> + spin_unlock(&tp->lock);
> rtl8139_interrupt(dev->irq, dev);
> - enable_irq(dev->irq);
> + local_irq_restore(flags);
> }
> #endif
>
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Simon Arlott
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: netconsole system freeze when cable unplugged
2007-03-09 23:30 ` Simon Arlott
@ 2007-03-10 13:38 ` Andi Kleen
2007-03-10 14:06 ` Simon Arlott
0 siblings, 1 reply; 7+ messages in thread
From: Andi Kleen @ 2007-03-10 13:38 UTC (permalink / raw)
To: Simon Arlott; +Cc: Francois Romieu, Linux Kernel Mailing List, netdev
Simon Arlott <simon@fire.lp0.eu> writes:
> On 09/03/07 20:42, Francois Romieu wrote:
> > Simon Arlott <simon@fire.lp0.eu> :
> >> When I unplug the cable the system just stops responding to
> >> anything, at all. No message is printed to the console when the
> >> cable is plugged back in.
> > rtl8139_interrupt (spin_lock(&tp->lock))
> > -> rtl8139_weird_interrupt
> > -> rtl_check_media
> > -> mii_check_media (printk(KERN_INFO "%s: link down\n", ...))
> > [netpoll stuff here]
> > -> rtl8139_poll_controller
> > -> rtl8139_interrupt
> > *deadlock*
> > See below for my random stuff of the day. Feel free to open a PR at
> > bugzilla.kernel.org if the issue does not go away.
>
> The patch doesn't fix it, nothing changes. I'm not sure how this can
> be debugged if printk won't work...
earlyprintk can be called directly (early_printk()) and should
work. It won't log over the network of course.
-Andi
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: netconsole system freeze when cable unplugged
2007-03-10 13:38 ` Andi Kleen
@ 2007-03-10 14:06 ` Simon Arlott
2007-03-11 7:50 ` Andi Kleen
0 siblings, 1 reply; 7+ messages in thread
From: Simon Arlott @ 2007-03-10 14:06 UTC (permalink / raw)
To: Andi Kleen; +Cc: Francois Romieu, Linux Kernel Mailing List, netdev
On 10/03/07 13:38, Andi Kleen wrote:
> Simon Arlott <simon@fire.lp0.eu> writes:
>
>> On 09/03/07 20:42, Francois Romieu wrote:
>>> Simon Arlott <simon@fire.lp0.eu> :
>>>> When I unplug the cable the system just stops responding to
>>>> anything, at all. No message is printed to the console when the
>>>> cable is plugged back in.
>>> rtl8139_interrupt (spin_lock(&tp->lock))
>>> -> rtl8139_weird_interrupt
>>> -> rtl_check_media
>>> -> mii_check_media (printk(KERN_INFO "%s: link down\n", ...))
>>> [netpoll stuff here]
>>> -> rtl8139_poll_controller
>>> -> rtl8139_interrupt
>>> *deadlock*
>>> See below for my random stuff of the day. Feel free to open a PR at
>>> bugzilla.kernel.org if the issue does not go away.
>> The patch doesn't fix it, nothing changes. I'm not sure how this can
>> be debugged if printk won't work...
>
> earlyprintk can be called directly (early_printk()) and should
> work. It won't log over the network of course.
It also won't log over the serial console either :(
(but that's probably a good thing, it's slow enough to boot with tons
of messages to the display because of netconsole and nfs).
rtl8139_interrupt
-> spin_lock(&tp->lock)
-> rtl8139_weird_interrupt
-> rtl_check_media
-> mii_check_media
-> printk(KERN_INFO "%s: link down\n", ...)
-> wite_msg
-> local_irq_save
-> netpoll_send_udp
-> netpoll_send_skb
-> local_irq_save
-> dev->hard_start_xmit(..., ...)
rtl8139_start_xmit
-> spin_lock_irqsave
*deadlock*
--
Simon Arlott
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: netconsole system freeze when cable unplugged
2007-03-10 14:06 ` Simon Arlott
@ 2007-03-11 7:50 ` Andi Kleen
0 siblings, 0 replies; 7+ messages in thread
From: Andi Kleen @ 2007-03-11 7:50 UTC (permalink / raw)
To: Simon Arlott
Cc: Andi Kleen, Francois Romieu, Linux Kernel Mailing List, netdev
On Sat, Mar 10, 2007 at 02:06:28PM +0000, Simon Arlott wrote:
> On 10/03/07 13:38, Andi Kleen wrote:
> >Simon Arlott <simon@fire.lp0.eu> writes:
> >
> >>On 09/03/07 20:42, Francois Romieu wrote:
> >>>Simon Arlott <simon@fire.lp0.eu> :
> >>>>When I unplug the cable the system just stops responding to
> >>>>anything, at all. No message is printed to the console when the
> >>>>cable is plugged back in.
> >>>rtl8139_interrupt (spin_lock(&tp->lock))
> >>>-> rtl8139_weird_interrupt
> >>> -> rtl_check_media
> >>> -> mii_check_media (printk(KERN_INFO "%s: link down\n", ...))
> >>> [netpoll stuff here]
> >>> -> rtl8139_poll_controller
> >>> -> rtl8139_interrupt
> >>> *deadlock*
> >>>See below for my random stuff of the day. Feel free to open a PR at
> >>>bugzilla.kernel.org if the issue does not go away.
> >>The patch doesn't fix it, nothing changes. I'm not sure how this can
> >>be debugged if printk won't work...
> >
> >earlyprintk can be called directly (early_printk()) and should
> >work. It won't log over the network of course.
>
> It also won't log over the serial console either :(
It does, you just have to configure it properly.
earlyprintk=serial,ttySx,baud
-Andi
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: netconsole system freeze when cable unplugged
2007-03-09 20:42 ` Francois Romieu
2007-03-09 23:30 ` Simon Arlott
@ 2007-03-10 20:31 ` Matt Mackall
1 sibling, 0 replies; 7+ messages in thread
From: Matt Mackall @ 2007-03-10 20:31 UTC (permalink / raw)
To: Francois Romieu; +Cc: Simon Arlott, Linux Kernel Mailing List, netdev
On Fri, Mar 09, 2007 at 09:42:43PM +0100, Francois Romieu wrote:
> Simon Arlott <simon@fire.lp0.eu> :
> > When I unplug the cable the system just stops responding to anything,
> > at all. No message is printed to the console when the cable is plugged
> > back in.
>
> rtl8139_interrupt (spin_lock(&tp->lock))
> -> rtl8139_weird_interrupt
> -> rtl_check_media
> -> mii_check_media (printk(KERN_INFO "%s: link down\n", ...))
> [netpoll stuff here]
> -> rtl8139_poll_controller
> -> rtl8139_interrupt
> *deadlock*
Probably the best thing that can be done here aside from moving
mii_check_media outside interrupt handling is to add
netpoll_plug/unplug(dev) methods that push work off to netpoll's queue
for drivers that have a netpoll recursion problem.
--
Mathematics is the supreme nostalgia of our time.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-03-11 7:50 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-09 19:35 netconsole system freeze when cable unplugged Simon Arlott
2007-03-09 20:42 ` Francois Romieu
2007-03-09 23:30 ` Simon Arlott
2007-03-10 13:38 ` Andi Kleen
2007-03-10 14:06 ` Simon Arlott
2007-03-11 7:50 ` Andi Kleen
2007-03-10 20:31 ` Matt Mackall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).