From: La'd (ltoqgwu.xdbdzu@suonline.net)
Date: Thu Sep 06 2001 - 07:09:00 EEST
X-Info: Received from 195.47.60.30 by SMTP-gateway
X-Info: Received from stdin by prsend.pl.3179
X-From: Ladislav Vaiz <vpx@omnibus.co.uk>
Subject: Yam driver bugfix (2.4.x)
Sender: awzargej.mhxogjgvsm@makinastudios.com
X-sender: bna@macc.edu
by localhost with smtp; 6 sep 2001 06: 06:47 -0000
Received: from localhost (lpsqaxli@telemedia.net.mx)
Content-type: TEXT/PLAIN; charset=US-ASCII
by 195.47.60.30 with smtp; 6 sep 2001 06: 08:54 -0000
Mime-version: 1.0
Precedence: bulk
Date: Thu, 6 Sep 2001 08:06:46 +0200 (CEST)
X-mailing-list: crolzybv.iltsd@mailit.tunk.net
Message-id: <terhi.victor@logonet.com>
Hi all,
there is patch for 2.4. kernels (2.4.9). It fixes problems with yam
driver:
1) calls kfree_skb_any() in interrupt handler - calling kfree_skb() causes
warnings and crash.
2) calls request_irq() and fee_irq() with dev_id - it fixes problems with
shared interrupts
All reports are welcome before sending this to l-k.
73! Lada, OK1ZIA
--- linux.orig/drivers/net/hamradio/yam.c Wed Apr 18 23:40:06 2001
+++ linux/drivers/net/hamradio/yam.c Wed Sep 5 19:20:57 2001
@@ -35,6 +35,9 @@
* 0.6 F6FBB 25.08.98 Added 1200Bds format
* 0.7 F6FBB 12.09.98 Added to the kernel configuration
* 0.8 F6FBB 14.10.98 Fixed slottime/persistance timing bug
+ * OK1ZIA 2.09.01 Fixed "kfree_skb on hard IRQ"
+ * using dev_kfree_skb_any(). (important in 2.4 kernel)
+ *
*/
/*****************************************************************************/
@@ -649,16 +652,16 @@
yp->tx_state = TX_DATA;
if (skb->data[0] != 0) {
/* do_kiss_params(s, skb->data, skb->len); */
- dev_kfree_skb(skb);
+ dev_kfree_skb_any(skb);
break;
}
yp->tx_len = skb->len - 1; /* strip KISS byte */
if (yp->tx_len >= YAM_MAX_FRAME || yp->tx_len < 2) {
- dev_kfree_skb(skb);
+ dev_kfree_skb_any(skb);
break;
}
memcpy(yp->tx_buf, skb->data + 1, yp->tx_len);
- dev_kfree_skb(skb);
+ dev_kfree_skb_any(skb);
yp->tx_count = 0;
yp->tx_crcl = 0x21;
yp->tx_crch = 0xf3;
@@ -858,7 +861,7 @@
return -EIO;
}
outb(0, IER(dev->base_addr));
- if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT | SA_SHIRQ, dev->name, NULL)) {
+ if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT | SA_SHIRQ, dev->name, dev)) {
printk(KERN_ERR "%s: irq %d busy\n", dev->name, dev->irq);
return -EBUSY;
}
@@ -896,7 +899,7 @@
outb(0, IER(dev->base_addr));
outb(1, MCR(dev->base_addr));
/* Remove IRQ handler if last */
- free_irq(dev->irq, NULL);
+ free_irq(dev->irq,dev);
release_region(dev->base_addr, YAM_EXTENT);
netif_stop_queue(dev);
while ((skb = skb_dequeue(&yp->send_queue)))
-----CUT HERE----------------
-
To unsubscribe from this list: send the line "unsubscribe linux-hams" in
the body of a message to vvgsu@mail.dy.fi
More majordomo info at http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-hams" in
the body of a message to hnqszzpv@powercom.net
More majordomo info at http://vger.kernel.org/majordomo-info.html
This archive was generated by hypermail 2b30 : Thu Sep 06 2001 - 20:41:58 EEST