Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | Peter Chubb <> | Date | Tue, 23 Sep 2003 10:34:18 +1000 | Subject | Re: NS83820 2.6.0-test5 driver seems unstable on IA64 |
| |
OK, a patch for the driver in 2.6.0-test5 is appended.
I suspect that there are other architectures that don't like unaligned accesses... feel free to add them to the #ifdef. This is based on code I found in the revision history. It seems to work.
Without this patch, the console messages saying `unaligned access' would come out fast enough and often enough to delay and or miss interrupts, leading to an eventual machine hangup on I2000.
===== drivers/net/ns83820.c 1.30 vs edited ===== --- 1.30/drivers/net/ns83820.c Thu Sep 11 09:46:45 2003 +++ edited/drivers/net/ns83820.c Mon Sep 22 12:49:18 2003 @@ -793,6 +793,25 @@ } } +#if defined(__ia64__) +static inline struct sk_buff *skb_realign_iphdr(struct sk_buff *skb, int len, struct ns83820 *dev) +{ + struct sk_buff *tmp = __dev_alloc_skb(len+2, GFP_ATOMIC); + if (!tmp) + return NULL; + tmp->dev = &dev->net_dev; + skb_reserve(tmp, 2); + memcpy(skb_put(tmp, len), skb->data, len); + kfree_skb(skb); + return tmp; +} +#else +static inline struct sk_buff *skb_realign_iphdr(struct sk_buff *skb, int len, struct ns83820 *dev) +{ + return skb; +} +#endif + static void FASTCALL(ns83820_rx_kick(struct ns83820 *dev)); static void ns83820_rx_kick(struct ns83820 *dev) { @@ -862,6 +881,7 @@ if (likely(CMDSTS_OK & cmdsts)) { int len = cmdsts & 0xffff; skb_put(skb, len); + skb = skb_realign_iphdr(skb, len, dev); if (unlikely(!skb)) goto netdev_mangle_me_harder_failed; if (cmdsts & CMDSTS_DEST_MULTI) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |