

- 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;
 }
 

_
