- It was doing spin_lock_irqsave()/spin_unlock() - Can't free the skb inside local_irq_save(): kfree_skb ends up running local_bh_enable(), which enables interrupts. 25-akpm/drivers/net/pcmcia/3c574_cs.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) diff -puN drivers/net/pcmcia/3c574_cs.c~3c574-irq-fix drivers/net/pcmcia/3c574_cs.c --- 25/drivers/net/pcmcia/3c574_cs.c~3c574-irq-fix Fri Apr 18 16:28:53 2003 +++ 25-akpm/drivers/net/pcmcia/3c574_cs.c Fri Apr 18 16:28:53 2003 @@ -940,11 +940,9 @@ static int el3_start_xmit(struct sk_buff outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); } - dev_kfree_skb (skb); pop_tx_status(dev); - - spin_unlock(&lp->window_lock); - + spin_unlock_irqrestore(&lp->window_lock, flags); + dev_kfree_skb(skb); return 0; } _