Subject: Re: Kernel Oops in UDP w/ ARM architecture

From: Eric Dumazet <[email-masked]>
Date: Mon, 09 Mar 2009 19:21:57 +0100

Please dont top post on this mailing list

Ron Yorgason a écrit :
> We're using the fec driver, found in drivers/net/fec.c.  I modified
> this driver slightly to get the MAC address from the redboot
> configuration stored in flash memory, but it's otherwise untouched.  I
> can send my version of the file if that would help.
> 
> --Ron
> 
> 

Given that ARM seems to be picky about non aligned accesses, you might
try this patch. This should force IP header to be aligned.

diff -u linux-2.6.19/drivers/net/fec.c.old linux-2.6.19/drivers/net/fec.c
--- linux-2.6.19/drivers/net/fec.c.old
+++ linux-2.6.19/drivers/net/fec.c
@@ -641,13 +641,14 @@
         * include that when passing upstream as it messes up
         * bridging applications.
         */
-       skb = dev_alloc_skb(pkt_len-4);
+       skb = dev_alloc_skb((pkt_len - 4) + 2);

        if (skb == NULL) {
                printk("%s: Memory squeeze, dropping packet.\n", dev->name);
                fep->stats.rx_dropped++;
        } else {
                skb->dev = dev;
+               skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */
                skb_put(skb,pkt_len-4); /* Make room */
                eth_copy_and_sum(skb, data, pkt_len-4, 0);
                skb->protocol=eth_type_trans(skb,dev);