2.4.5+ hangs on boot
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
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.0Any comments or suggestions? 2.4.5-ac19 is the last kernel I have that works.
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 artnl_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.0Any 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);