e1000: use GRO for receive
Jesse Brandeburg [Wed, 22 Sep 2010 18:23:05 +0000 (18:23 +0000)]
E1000 can benefit from calling the GRO receive functions.

Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

drivers/net/e1000/e1000_main.c

index c88439d..796523f 100644 (file)
@@ -3664,13 +3664,14 @@ static void e1000_consume_page(struct e1000_buffer *bi, struct sk_buff *skb,
 static void e1000_receive_skb(struct e1000_adapter *adapter, u8 status,
                              __le16 vlan, struct sk_buff *skb)
 {
-       if (unlikely(adapter->vlgrp && (status & E1000_RXD_STAT_VP))) {
-               vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                                        le16_to_cpu(vlan) &
-                                        E1000_RXD_SPC_VLAN_MASK);
-       } else {
-               netif_receive_skb(skb);
-       }
+       skb->protocol = eth_type_trans(skb, adapter->netdev);
+
+       if ((unlikely(adapter->vlgrp && (status & E1000_RXD_STAT_VP))))
+               vlan_gro_receive(&adapter->napi, adapter->vlgrp,
+                                le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK,
+                                skb);
+       else
+               napi_gro_receive(&adapter->napi, skb);
 }
 
 /**
@@ -3828,8 +3829,6 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
                        goto next_desc;
                }
 
-               skb->protocol = eth_type_trans(skb, netdev);
-
                e1000_receive_skb(adapter, status, rx_desc->special, skb);
 
 next_desc:
@@ -3992,8 +3991,6 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
                                  ((u32)(rx_desc->errors) << 24),
                                  le16_to_cpu(rx_desc->csum), skb);
 
-               skb->protocol = eth_type_trans(skb, netdev);
-
                e1000_receive_skb(adapter, status, rx_desc->special, skb);
 
 next_desc: