Re: NS83820 2.6.0-test5 driver seems unstable on IA64

Benjamin LaHaise
2003-09-23T00:36:29Z

Denied. Dave, please explain.

-ben

On Tue, Sep 23, 2003 at 10:34:18AM +1000, Peter Chubb wrote:
>
> 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)

--
"The software industry today survives only through an unstated agreement
not to stir things up too much. We must hope this lawsuit [by SCO] isn't
the big stirring spoon." -- Ian Lance Taylor, Linux Journal, June 2003