]> git.openfabrics.org - ~emulex/for-vlad/old/compat-rdma.git/commitdiff
Refresh patches
authorVladimir Sokolovsky <vlad@mellanox.com>
Mon, 16 Jul 2012 14:17:19 +0000 (17:17 +0300)
committerVladimir Sokolovsky <vlad@mellanox.com>
Mon, 16 Jul 2012 14:17:19 +0000 (17:17 +0300)
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
patches/0001-ib_core-backport-dst_fetch_ha.patch
patches/0002-ib-core-Backport-flowi4-and-flowi6.patch
patches/0003-BACKPORT-core-netlink-for-kernels-3.4.patch
patches/0004-ib-core-Backport-pinned_vm-for-kernels-3.2.patch
patches/0005-ib-core-Backport-CLASS_ATTR-for-kernels-2.6.34.patch
patches/0006-Backport-mlx4_ib.patch
patches/0007-BACKPORT-ucma-Revert-sysctl-registrations.patch
patches/0008-BACKPORT-nes-for-RHEL-6.2-6.3.patch [deleted file]
patches/0008-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch [new file with mode: 0644]

index 19d514d374ef824904d259fd3da9204fab9ab165..a835b3d725f98fcc86684ebd969f994df5cfd64f 100644 (file)
@@ -1,15 +1,15 @@
-From 5d26d2ca164af6b639e7862105a7491b217847e5 Mon Sep 17 00:00:00 2001
+From 0bdb36768a4a4b5ed3984c671e76f29dbcc20ee6 Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Tue, 10 Jul 2012 15:57:24 +0300
-Subject: [PATCH 1/5] ib_core: backport dst_fetch_ha
+Subject: [PATCH 1/8] ib_core: backport dst_fetch_ha
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
- drivers/infiniband/core/addr.c |   36 ++++++++++++++++++++++++++++++++++++
- 1 files changed, 36 insertions(+), 0 deletions(-)
+ drivers/infiniband/core/addr.c |   58 ++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 58 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
-index 9c9ac92..16147cc 100644
+index 6ef660c..b3f7918 100644
 --- a/drivers/infiniband/core/addr.c
 +++ b/drivers/infiniband/core/addr.c
 @@ -178,28 +178,45 @@ static void queue_req(struct addr_req *req)
@@ -58,7 +58,7 @@ index 9c9ac92..16147cc 100644
  
  static int addr4_resolve(struct sockaddr_in *src_in,
                         struct sockaddr_in *dst_in,
-@@ -250,12 +267,37 @@ static int addr4_resolve(struct sockaddr_in *src_in,
+@@ -231,12 +248,37 @@ static int addr4_resolve(struct sockaddr_in *src_in,
        }
  
        /* If the device does ARP internally, return 'done' */
@@ -96,7 +96,7 @@ index 9c9ac92..16147cc 100644
  put:
        ip_rt_put(rt);
  out:
-@@ -329,7 +371,23 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
+@@ -284,7 +326,23 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
                goto put;
        }
  
@@ -121,5 +121,5 @@ index 9c9ac92..16147cc 100644
        dst_release(dst);
        return ret;
 -- 
-1.7.1
+1.7.0.4
 
index efee25441f528580488f67bb9254890a208d2eb5..adfa99217af20d01f3ab35abbd3c81f3dd68a6a5 100644 (file)
@@ -1,7 +1,7 @@
-From 2c405873e4741984cd75e7dcbcdb2ab81ac34431 Mon Sep 17 00:00:00 2001
+From bb3f1ecdb6baee2740a108b6df5710c7b69cd6f3 Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Tue, 10 Jul 2012 17:21:25 +0300
-Subject: [PATCH 2/5] ib/core: Backport flowi4 and flowi6
+Subject: [PATCH 2/8] ib/core: Backport flowi4 and flowi6
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
@@ -9,10 +9,10 @@ Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
  1 files changed, 45 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
-index e00422b..dbb8bcd 100644
+index b3f7918..16147cc 100644
 --- a/drivers/infiniband/core/addr.c
 +++ b/drivers/infiniband/core/addr.c
-@@ -211,22 +211,41 @@ static int addr4_resolve(struct sockaddr_in *src_in,
+@@ -225,22 +225,41 @@ static int addr4_resolve(struct sockaddr_in *src_in,
        __be32 src_ip = src_in->sin_addr.s_addr;
        __be32 dst_ip = dst_in->sin_addr.s_addr;
        struct rtable *rt;
@@ -54,7 +54,7 @@ index e00422b..dbb8bcd 100644
                ret = rdma_translate_ip((struct sockaddr *) dst_in, addr);
                if (!ret)
                        memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN);
-@@ -272,10 +291,16 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
+@@ -290,10 +309,16 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
                         struct sockaddr_in6 *dst_in,
                         struct rdma_dev_addr *addr)
  {
@@ -71,7 +71,7 @@ index e00422b..dbb8bcd 100644
        memset(&fl6, 0, sizeof fl6);
        fl6.daddr = dst_in->sin6_addr;
        fl6.saddr = src_in->sin6_addr;
-@@ -294,6 +319,26 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
+@@ -312,6 +337,26 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
                src_in->sin6_family = AF_INET6;
                src_in->sin6_addr = fl6.saddr;
        }
@@ -99,5 +99,5 @@ index e00422b..dbb8bcd 100644
        if (dst->dev->flags & IFF_LOOPBACK) {
                ret = rdma_translate_ip((struct sockaddr *) dst_in, addr);
 -- 
-1.7.1
+1.7.0.4
 
index d8617e57c95bfea91947ceaeff53b6168006a5bc..c7641058e69a2d66b80bb12125b4b6744fb0adb1 100644 (file)
@@ -1,7 +1,7 @@
-From c72b46457d5e88bea77d59bc486a12ec3ad0a80a Mon Sep 17 00:00:00 2001
+From 99c4d483228edc17d03d7b4ee21c36943b4bcaca Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Mon, 25 Jun 2012 22:28:24 +0300
-Subject: [PATCH 3/5] BACKPORT: core/netlink for kernels <= 3.4
+Subject: [PATCH 3/8] BACKPORT: core/netlink for kernels <= 3.4
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
@@ -32,5 +32,5 @@ index e497dfb..2ac867a 100644
        }
  
 -- 
-1.7.1
+1.7.0.4
 
index 9ecf5fc1825eeb61dccd55fac701d91d29df8ec6..277cd15781fd094167dd180297569c13ca1d2f2b 100644 (file)
@@ -1,7 +1,7 @@
-From 39e81c844d77792b939619bb4e8ad212640fd801 Mon Sep 17 00:00:00 2001
+From 812b253a1afb7e046ca7d60330692a4fcb1d0e84 Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Tue, 10 Jul 2012 17:41:31 +0300
-Subject: [PATCH 4/5] ib/core: Backport pinned_vm for kernels <= 3.2
+Subject: [PATCH 4/8] ib/core: Backport pinned_vm for kernels <= 3.2
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
@@ -61,5 +61,5 @@ index a841123..3b6cb84 100644
        mmput(mm);
        kfree(umem);
 -- 
-1.7.1
+1.7.0.4
 
index 024afa8df565abd1036741edd9156280369cad3b..1befd6ca4c85df805132fb2b5354e4f282cb3190 100644 (file)
@@ -1,7 +1,7 @@
-From b9bb7ce447837b2b8f732f06196b4590df1128d7 Mon Sep 17 00:00:00 2001
+From 12dcf9f472a1fc297b9909e84a4c7b2a82faeaa1 Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Tue, 10 Jul 2012 18:06:16 +0300
-Subject: [PATCH 5/5] ib/core: Backport CLASS_ATTR for kernels < 2.6.34
+Subject: [PATCH 5/8] ib/core: Backport CLASS_ATTR for kernels < 2.6.34
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
@@ -134,5 +134,5 @@ index 604556d..4b0d8f3 100644
                printk(KERN_ERR "user_verbs: couldn't create abi_version attribute\n");
                goto out_class;
 -- 
-1.7.1
+1.7.0.4
 
index 459872a445f8dd68dbc3f35b8661ee01cd6fd32a..ee0d2a1db6aab25a889042c68ff71a93c47a6ec1 100644 (file)
@@ -1,7 +1,7 @@
-From 681aab993638393808cc62cf6baa1aa6ab6cf36d Mon Sep 17 00:00:00 2001
+From d7e2b00aaca04e9c1f976001189f8289117ff1ca Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Thu, 12 Jul 2012 22:31:24 +0300
-Subject: [PATCH] Backport mlx4_ib
+Subject: [PATCH 6/8] Backport mlx4_ib
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
@@ -37,5 +37,5 @@ index 3530c41..765bf3b 100644
                        dev_put(ndev);
                }
 -- 
-1.7.1
+1.7.0.4
 
index 7a6d172e088f5af96a0f8d334b0b4b959245618d..c9ba19d0c2988ca246574b2fdd7795bf53b50d29 100644 (file)
@@ -1,7 +1,7 @@
-From 9ccb05fe619154aa63a787fa1bd561b5992264c3 Mon Sep 17 00:00:00 2001
+From 74269c6e48ef212f4151a99ea9a0a0ce58427535 Mon Sep 17 00:00:00 2001
 From: Vladimir Sokolovsky <vlad@mellanox.com>
 Date: Fri, 13 Jul 2012 00:24:56 +0300
-Subject: [PATCH] BACKPORT ucma: Revert sysctl registrations
+Subject: [PATCH 7/8] BACKPORT ucma: Revert sysctl registrations
 
 Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
 ---
@@ -44,5 +44,5 @@ index 8002ae6..5861cdb 100644
        misc_deregister(&ucma_misc);
        idr_destroy(&ctx_idr);
 -- 
-1.7.1
+1.7.0.4
 
diff --git a/patches/0008-BACKPORT-nes-for-RHEL-6.2-6.3.patch b/patches/0008-BACKPORT-nes-for-RHEL-6.2-6.3.patch
deleted file mode 100644 (file)
index e43bbf3..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-From: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>\r
-Subject: [PATCH] RDMA/nes: Backports for RHEL 6.2 and 6.3\r
-\r
-Backports for linux-3.5 nes to RHEL-6.2 and RHEL-6.3\r
-\r
-Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>\r
----\r
- drivers/infiniband/hw/nes/nes_cm.c  |   12 +++++++++++-\r
- drivers/infiniband/hw/nes/nes_nic.c |   26 +++++++++++++++++++++++---\r
- 2 files changed, 34 insertions(+), 4 deletions(-)\r
-\r
-diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c\r
-index 020e95c..0b5b1a9 100644\r
---- a/drivers/infiniband/hw/nes/nes_cm.c\r
-+++ b/drivers/infiniband/hw/nes/nes_cm.c\r
-@@ -1343,9 +1343,16 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi\r
-       int rc = arpindex;\r
-       struct net_device *netdev;\r
-       struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter;\r
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))\r
-+      struct flowi fl;\r
\r
-+      memset(&fl, 0, sizeof fl);\r
-+      fl.nl_u.ip4_u.daddr = htonl(dst_ip);\r
-+      if (ip_route_output_key(&init_net, &rt, &fl)) {\r
-+#else\r
-       rt = ip_route_output(&init_net, htonl(dst_ip), 0, 0, 0);\r
-       if (IS_ERR(rt)) {\r
-+#endif\r
-               printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n",\r
-                      __func__, dst_ip);\r
-               return rc;\r
-@@ -1356,8 +1363,11 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi\r
-       else\r
-               netdev = nesvnic->netdev;\r
\r
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))\r
-+      neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev);\r
-+#else\r
-       neigh = dst_neigh_lookup(&rt->dst, &dst_ip);\r
--\r
-+#endif\r
-       rcu_read_lock();\r
-       if (neigh) {\r
-               if (neigh->nud_state & NUD_VALID) {\r
-diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c\r
-index f3a3ecf..8544d0a 100644\r
---- a/drivers/infiniband/hw/nes/nes_nic.c\r
-+++ b/drivers/infiniband/hw/nes/nes_nic.c\r
-@@ -909,7 +909,11 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev)\r
-       if (!mc_all_on) {\r
-               char *addrs;\r
-               int i;\r
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))\r
-               struct netdev_hw_addr *ha;\r
-+#else\r
-+              struct dev_mc_list *mcaddr;\r
-+#endif\r
\r
-               addrs = kmalloc(ETH_ALEN * mc_count, GFP_ATOMIC);\r
-               if (!addrs) {\r
-@@ -917,9 +921,13 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev)\r
-                       goto unlock;\r
-               }\r
-               i = 0;\r
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))\r
-               netdev_for_each_mc_addr(ha, netdev)\r
-                       memcpy(get_addr(addrs, i++), ha->addr, ETH_ALEN);\r
--\r
-+#else\r
-+              netdev_for_each_mc_addr(mcaddr, netdev)\r
-+                      memcpy(get_addr(addrs, i++), mcaddr->dmi_addr, ETH_ALEN);\r
-+#endif\r
-               perfect_filter_register_address = NES_IDX_PERFECT_FILTER_LOW +\r
-                                               pft_entries_preallocated * 0x8;\r
-               for (i = 0, mc_index = 0; mc_index < max_pft_entries_avaiable;\r
-@@ -1610,6 +1618,7 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev,\r
-       spin_unlock_irqrestore(&nesadapter->phy_lock, flags);\r
- }\r
\r
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))\r
- static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features)\r
- {\r
-       /*\r
-@@ -1635,6 +1644,7 @@ static int nes_set_features(struct net_device *netdev, netdev_features_t feature\r
\r
-       return 0;\r
- }\r
-+#endif\r
\r
- static const struct net_device_ops nes_netdev_ops = {\r
-       .ndo_open               = nes_netdev_open,\r
-@@ -1646,8 +1656,10 @@ static const struct net_device_ops nes_netdev_ops = {\r
-       .ndo_set_rx_mode        = nes_netdev_set_multicast_list,\r
-       .ndo_change_mtu         = nes_netdev_change_mtu,\r
-       .ndo_validate_addr      = eth_validate_addr,\r
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))\r
-       .ndo_fix_features       = nes_fix_features,\r
-       .ndo_set_features       = nes_set_features,\r
-+#endif\r
- };\r
\r
- /**\r
-@@ -1711,12 +1723,20 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,\r
-       netdev->dev_addr[5] = (u8)u64temp;\r
-       memcpy(netdev->perm_addr, netdev->dev_addr, 6);\r
\r
-+      netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;\r
-+\r
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))\r
-       netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM |\r
-                             NETIF_F_HW_VLAN_RX;\r
--      if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV))\r
--              netdev->hw_features |= NETIF_F_TSO;\r
-       netdev->features |= netdev->hw_features;\r
-       netdev->hw_features |= NETIF_F_LRO;\r
-+#endif\r
-+      if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) {\r
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))\r
-+              netdev->hw_features |= NETIF_F_TSO;\r
-+#endif\r
-+              netdev->features |= NETIF_F_TSO | NETIF_F_GSO;\r
-+      }\r
\r
-       nes_debug(NES_DBG_INIT, "nesvnic = %p, reported features = 0x%lX, QPid = %d,"\r
-                       " nic_index = %d, logical_port = %d, mac_index = %d.\n",\r
--- \r
-1.7.4.2\r
-\r
-\r
diff --git a/patches/0008-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch b/patches/0008-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch
new file mode 100644 (file)
index 0000000..1992493
--- /dev/null
@@ -0,0 +1,131 @@
+From 80aaf4b94ca74d3d0c661932ec05d46da4c42022 Mon Sep 17 00:00:00 2001
+From: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
+Date: Mon, 16 Jul 2012 17:14:31 +0300
+Subject: [PATCH 8/8] RDMA/nes: Backports for RHEL 6.2 and 6.3
+
+Backports for linux-3.5 nes to RHEL-6.2 and RHEL-6.3
+
+Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
+---
+ drivers/infiniband/hw/nes/nes_cm.c  |   12 +++++++++++-
+ drivers/infiniband/hw/nes/nes_nic.c |   26 +++++++++++++++++++++++---
+ 2 files changed, 34 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
+index 020e95c..0b5b1a9 100644
+--- a/drivers/infiniband/hw/nes/nes_cm.c
++++ b/drivers/infiniband/hw/nes/nes_cm.c
+@@ -1343,9 +1343,16 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi
+       int rc = arpindex;
+       struct net_device *netdev;
+       struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))
++      struct flowi fl;
++      memset(&fl, 0, sizeof fl);
++      fl.nl_u.ip4_u.daddr = htonl(dst_ip);
++      if (ip_route_output_key(&init_net, &rt, &fl)) {
++#else
+       rt = ip_route_output(&init_net, htonl(dst_ip), 0, 0, 0);
+       if (IS_ERR(rt)) {
++#endif
+               printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n",
+                      __func__, dst_ip);
+               return rc;
+@@ -1356,8 +1363,11 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi
+       else
+               netdev = nesvnic->netdev;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
++      neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev);
++#else
+       neigh = dst_neigh_lookup(&rt->dst, &dst_ip);
+-
++#endif
+       rcu_read_lock();
+       if (neigh) {
+               if (neigh->nud_state & NUD_VALID) {
+diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
+index f3a3ecf..d54776f 100644
+--- a/drivers/infiniband/hw/nes/nes_nic.c
++++ b/drivers/infiniband/hw/nes/nes_nic.c
+@@ -909,7 +909,11 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev)
+       if (!mc_all_on) {
+               char *addrs;
+               int i;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+               struct netdev_hw_addr *ha;
++#else
++              struct dev_mc_list *mcaddr;
++#endif
+               addrs = kmalloc(ETH_ALEN * mc_count, GFP_ATOMIC);
+               if (!addrs) {
+@@ -917,9 +921,13 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev)
+                       goto unlock;
+               }
+               i = 0;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+               netdev_for_each_mc_addr(ha, netdev)
+                       memcpy(get_addr(addrs, i++), ha->addr, ETH_ALEN);
+-
++#else
++              netdev_for_each_mc_addr(mcaddr, netdev)
++                      memcpy(get_addr(addrs, i++), mcaddr->dmi_addr, ETH_ALEN);
++#endif
+               perfect_filter_register_address = NES_IDX_PERFECT_FILTER_LOW +
+                                               pft_entries_preallocated * 0x8;
+               for (i = 0, mc_index = 0; mc_index < max_pft_entries_avaiable;
+@@ -1610,6 +1618,7 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev,
+       spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
+ }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+ static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features)
+ {
+       /*
+@@ -1635,6 +1644,7 @@ static int nes_set_features(struct net_device *netdev, netdev_features_t feature
+       return 0;
+ }
++#endif
+ static const struct net_device_ops nes_netdev_ops = {
+       .ndo_open               = nes_netdev_open,
+@@ -1646,8 +1656,10 @@ static const struct net_device_ops nes_netdev_ops = {
+       .ndo_set_rx_mode        = nes_netdev_set_multicast_list,
+       .ndo_change_mtu         = nes_netdev_change_mtu,
+       .ndo_validate_addr      = eth_validate_addr,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+       .ndo_fix_features       = nes_fix_features,
+       .ndo_set_features       = nes_set_features,
++#endif
+ };
+ /**
+@@ -1711,12 +1723,20 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
+       netdev->dev_addr[5] = (u8)u64temp;
+       memcpy(netdev->perm_addr, netdev->dev_addr, 6);
++      netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
++
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
+       netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM |
+                             NETIF_F_HW_VLAN_RX;
+-      if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV))
+-              netdev->hw_features |= NETIF_F_TSO;
+       netdev->features |= netdev->hw_features;
+       netdev->hw_features |= NETIF_F_LRO;
++#endif
++      if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
++              netdev->hw_features |= NETIF_F_TSO;
++#endif
++              netdev->features |= NETIF_F_TSO | NETIF_F_GSO;
++      }
+       nes_debug(NES_DBG_INIT, "nesvnic = %p, reported features = 0x%lX, QPid = %d,"
+                       " nic_index = %d, logical_port = %d, mac_index = %d.\n",
+-- 
+1.7.0.4
+