fec: align receive packets
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 15 Apr 2009 01:32:21 +0000 (01:32 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Apr 2009 09:34:51 +0000 (02:34 -0700)
Otherwise we get a lot of alignment errors

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/fec.c

index 5ca2d6bcc23af338bdd1016e30d95b75a5e452de..ba3eb54b63f563371260393c16a7f33364895062 100644 (file)
@@ -598,13 +598,14 @@ fec_enet_rx(struct net_device *dev)
                 * 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 + NET_IP_ALIGN);
 
-               if (skb == NULL) {
+               if (unlikely(!skb)) {
                        printk("%s: Memory squeeze, dropping packet.\n",
                                        dev->name);
                        dev->stats.rx_dropped++;
                } else {
+                       skb_reserve(skb, NET_IP_ALIGN);
                        skb_put(skb, pkt_len - 4);      /* Make room */
                        skb_copy_to_linear_data(skb, data, pkt_len - 4);
                        skb->protocol = eth_type_trans(skb, dev);