smsc95xx: fix tx checksum offload for big endian
authorSteve Glendinning <steve.glendinning@shawell.net>
Fri, 2 Nov 2012 00:44:20 +0000 (00:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 3 Nov 2012 19:29:55 +0000 (15:29 -0400)
f7b2927 introduced tx checksum offload support for smsc95xx,
and enabled it by default. This feature doesn't take
endianness into account, so causes most tx to fail on
those platforms.

This patch fixes the problem fully by adding the missing
conversion.

An alternate workaround is to disable TX checksum offload
on those platforms. The cpu impact of this feature is very low.

Signed-off-by: Steve Glendinning <steve.glendinning@shawell.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/smsc95xx.c

index 7479a5761d0d6b35c9a275ae470e49dc959de366..3286166415b479969cf0624a522baf3b6a97eb73 100644 (file)
@@ -1344,6 +1344,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev,
                } else {
                        u32 csum_preamble = smsc95xx_calc_csum_preamble(skb);
                        skb_push(skb, 4);
+                       cpu_to_le32s(&csum_preamble);
                        memcpy(skb->data, &csum_preamble, 4);
                }
        }