Bart Dorsey wrote: > I constantly get this message on the console while using a Madge Smart > 16/4 PCI Mk2 (Abyss) token ring card. > > kernel: Warning: kfree_skb on hard IRQ d08cfea9 The attached patch, against 2.4.1-pre10, should fix things. tms380tr, the base module that abyss driver uses, needed to be updated to use special IRQ versions of the dev_kfree_skb function. Linus (and others), the patch also adds a missing dev->last_rx assignment (which records the time of last packet reception). -- Jeff Garzik | "You see, in this world there's two kinds of Building 1024 | people, my friend: Those with loaded guns MandrakeSoft | and those who dig. You dig." --Blondie
Index: linux_2_4/drivers/net/tokenring/tms380tr.c diff -u linux_2_4/drivers/net/tokenring/tms380tr.c:1.1.1.3 linux_2_4/drivers/net/tokenring/tms380tr.c:1.1.1.3.76.2 --- linux_2_4/drivers/net/tokenring/tms380tr.c:1.1.1.3 Sun Oct 22 14:56:23 2000 +++ linux_2_4/drivers/net/tokenring/tms380tr.c Tue Jan 23 07:19:16 2001 @@ -1977,7 +1977,7 @@ printk(KERN_INFO "Cancel tx (%08lXh).\n", (unsigned long)tpl); - dev_kfree_skb(tpl->Skb); + dev_kfree_skb_any(tpl->Skb); } for(;;) @@ -1986,7 +1986,7 @@ if(skb == NULL) break; tp->QueueSkb++; - dev_kfree_skb(skb); + dev_kfree_skb_any(skb); } return; @@ -2053,7 +2053,7 @@ } tp->MacStat.tx_packets++; - dev_kfree_skb(tpl->Skb); + dev_kfree_skb_irq(tpl->Skb); tpl->BusyFlag = 0; /* "free" TPL */ } @@ -2127,7 +2127,7 @@ printk(KERN_INFO "%s: Received my own frame\n", dev->name); if(rpl->Skb != NULL) - dev_kfree_skb(rpl->Skb); + dev_kfree_skb_irq(rpl->Skb); } else #endif @@ -2171,13 +2171,14 @@ skb_trim(skb,Length); skb->protocol = tr_type_trans(skb,dev); netif_rx(skb); + dev->last_rx = jiffies; } } } else /* Invalid frame */ { if(rpl->Skb != NULL) - dev_kfree_skb(rpl->Skb); + dev_kfree_skb_irq(rpl->Skb); /* Skip list. */ if(rpl->Status & RX_START_FRAME)