Skip to contentSkip to conversation

2.4.5+ hangs on boot

DISCUSSION David Ford 1 participant 3 messages Jul 14, 2001 – Jul 15, 2001 Networking

lore
Share & tools
lore

David Ford

author
#0 lore raw

Ok, aic7xxx hang solved on one machine with APIC solution Ok, sched.c hang solved on another machine with patch.

However that patch doesn't solve everything and there are a few other places where things hang.

*) I20 hangs in the middle of I20 init on -every- system I have from 586 to pIII in recent kernels *) something hangs just after floppy init, last line is FDC0...

The FDC is immediately prior to where I2O inits so possibly the hang is actually just following FDC/I2O? Normal boot messages should be like this:

Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
Loading I2O Core - (c) Copyright 1999 Red Hat Software Linux I2O PCI support (c) 1999 Red Hat Software.
i2o: Checking for PCI I2O controllers...
I2O configuration manager v 0.04.
(C) Copyright 1999 Red Hat Software
I2O Block Storage OSM v0.9
(c) Copyright 1999-2001 Red Hat Software.
i2o_block: Checking for Boot device...
i2o_block: Checking for I2O Block devices... I2O LAN OSM (C) 1999 University of Helsinki. early initialization of device teql0 is deferred
loop: loaded (max 8 devices)
Linux Tulip driver version 0.9.15-pre3 (June 1, 2001)
PCI: Found IRQ 5 for device 00:10.0

Any comments or suggestions? 2.4.5-ac19 is the last kernel I have that works.

David

author
#1 lore raw

Ok, the problem is this. I have TEQL packet scheduling in my config, the kernel runs through this sequence on boot:

net_dev_init()
pktsched_init()

       teql_init()    [starts a lock with rtnl_lock()]
           register_netdevice()
               net_dev_init()
                   pktsched_init()
                       teql_init() [hangs here...]

Here is the problem. We enter teql_init() again with a rtnl_lock() already being held. Do any of the authors of these functions want to jump in here?

David

Quoted 8 lines · David Ford

[...]
I2O LAN OSM (C) 1999 University of Helsinki. early initialization of device teql0 is deferred
loop: loaded (max 8 devices)
Linux Tulip driver version 0.9.15-pre3 (June 1, 2001)
PCI: Found IRQ 5 for device 00:10.0

Any comments or suggestions? 2.4.5-ac19 is the last kernel I have that works.

author
#2 lore raw
In reply to David Ford

Ok, since net_dev_init() is called from genhd.c:53, I figured it'd work just fine if I removed it from net/core/dev.c in register_netdev(). Since I'm not as well steeped in this code, those who know better are invited to correct me.

net/core/dev.c Wed Jun 20 21:00:55 2001 renamed from net/core/dev.c Sat Jul 14 17:48:57 2001 +0 -0
@@ -2405,6 +2401,9 @@
#ifdef CONFIG_NET_FASTROUTE
       dev->fastpath_lock=RW_LOCK_UNLOCKED;

#endif
-
- if (dev_boot_phase)
- net_dev_init();

#ifdef CONFIG_NET_DIVERT
       ret = alloc_divert_blk(dev);

David

Quoted 10 lines · David Ford

Ok, the problem is this. I have TEQL packet scheduling in my config, the kernel runs through this sequence on boot:

net_dev_init()
pktsched_init()

       teql_init()    [starts a lock with rtnl_lock()]
           register_netdevice()
               net_dev_init()
                   pktsched_init()
                       teql_init() [hangs here...]
Quoted 15 lines

Here is the problem. We enter teql_init() again with a rtnl_lock() already being held. Do any of the authors of these functions want to jump in here?

David

Quoted 8 lines · David Ford

[...]
I2O LAN OSM (C) 1999 University of Helsinki. early initialization of device teql0 is deferred
loop: loaded (max 8 devices)
Linux Tulip driver version 0.9.15-pre3 (June 1, 2001)
PCI: Found IRQ 5 for device 00:10.0

Any comments or suggestions? 2.4.5-ac19 is the last kernel I have that works.

net/core/dev.c +0 -3
@@ -2405,6 +2401,9 @@
 #ifdef CONFIG_NET_FASTROUTE
 	dev->fastpath_lock=RW_LOCK_UNLOCKED;
 #endif
-
-	if (dev_boot_phase)
-		net_dev_init();

#ifdef CONFIG_NET_DIVERT
ret = alloc_divert_blk(dev);