Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 2352

kernel-2.6.18-194.11.1.el5.src.rpm

From: Herbert Xu <herbert.xu@redhat.com>
Date: Mon, 1 Jun 2009 14:12:14 +1000
Subject: [net] netxen: add GRO Support
Message-id: 20090601041214.GA8926@gondor.apana.org.au
O-Subject: [RHEL5 PATCH] netxen: Add GRO Support
Bugzilla: 499347
RH-Acked-by: David Miller <davem@redhat.com>
RH-Acked-by: Thomas Graf <tgraf@redhat.com>

RHEL5 bugzilla 499347

Thanks to Mark Wagner for providing the hardware for testing.

netxen: Add GRO Support

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index 320bf55..1c7ac2f 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -1212,6 +1212,7 @@ struct netxen_dummy_dma {
 
 struct netxen_adapter {
 	struct netxen_hardware_context ahw;
+	struct napi_struct napi;
 
 	struct net_device *netdev;
 	struct pci_dev *pdev;
diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c
index ea2b2d3..dc1092f 100644
--- a/drivers/net/netxen/netxen_nic_init.c
+++ b/drivers/net/netxen/netxen_nic_init.c
@@ -1300,7 +1300,7 @@ netxen_process_rcv(struct netxen_adapter *adapter, int ctxid,
 		adapter->stats.rxdropped++;
 	} else {
 
-		netif_receive_skb(skb);
+		napi_gro_receive(&adapter->napi, skb);
 		netdev->last_rx = jiffies;
 
 		adapter->stats.no_rcv++;
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 2cab2a0..05a3396 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -687,6 +687,7 @@ skip_doorbell:
 #endif
  
 	netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
+	netdev->features |= (NETIF_F_GRO);
   
 	if (NX_IS_REVISION_P3(revision_id)) {
 		netdev->features |= (NETIF_F_HW_CSUM | NETIF_F_TSO6);
@@ -1607,6 +1608,8 @@ static int netxen_nic_poll(struct net_device *netdev, int *budget)
 	netdev->quota -= work_done;
 	*budget -= work_done;
 
+	napi_gro_flush(&adapter->napi);
+
 	if ((work_done < work_to_do) && tx_complete) {
 		netif_rx_complete(adapter->netdev);
 		netxen_nic_enable_int(adapter);