When support for the GSET and SSET ethtool ioctls was added to
eepro100.c in 2.4.20, the tx lock was overloaded to serialize their use.
Unfortunately, this lock is only initialized in dev->open(), causing
ethtool to deadlock the machine when used on an unconfigured eepro100
interface.
The fix is to initialize the spinlock at probe time. Jeff, the patch
below is against 2.4.21-pre5, but I'm assuming you'll integrate it into
2.5 and push it to Linus as well as Marcelo. It applies to both trees.
Jason
--- linux-2.4.21-pre5/drivers/net/eepro100.c Thu Feb 27 14:21:34 2003
+++ linux-eepro100/drivers/net/eepro100.c Fri Mar 7 16:38:17 2003
@@ -842,6 +842,7 @@
sp->lstats = (struct speedo_stats *)(sp->tx_ring + TX_RING_SIZE);
sp->lstats_dma = TX_RING_ELEM_DMA(sp, TX_RING_SIZE);
init_timer(&sp->timer); /* used in ioctl() */
+ spin_lock_init(&sp->lock);
sp->mii_if.full_duplex = option >= 0 && (option & 0x10) ? 1 : 0;
if (card_idx >= 0) {
@@ -993,7 +994,6 @@
sp->dirty_tx = 0;
sp->last_cmd = 0;
sp->tx_full = 0;
- spin_lock_init(&sp->lock);
sp->in_interrupt = 0;
/* .. we can safely take handler calls during init. */