From d418e0ef9f768f021acd8de60a6ef7ee12491073 Mon Sep 17 00:00:00 2001 From: Vladimir Sokolovsky Date: Mon, 16 Jul 2012 17:17:19 +0300 Subject: [PATCH] Refresh patches Signed-off-by: Vladimir Sokolovsky --- .../0001-ib_core-backport-dst_fetch_ha.patch | 16 +- ...2-ib-core-Backport-flowi4-and-flowi6.patch | 14 +- ...ACKPORT-core-netlink-for-kernels-3.4.patch | 6 +- ...e-Backport-pinned_vm-for-kernels-3.2.patch | 6 +- ...ckport-CLASS_ATTR-for-kernels-2.6.34.patch | 6 +- patches/0006-Backport-mlx4_ib.patch | 6 +- ...ORT-ucma-Revert-sysctl-registrations.patch | 6 +- ...-nes-Backports-for-RHEL-6.2-and-6.3.patch} | 261 +++++++++--------- 8 files changed, 161 insertions(+), 160 deletions(-) rename patches/{0008-BACKPORT-nes-for-RHEL-6.2-6.3.patch => 0008-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch} (95%) diff --git a/patches/0001-ib_core-backport-dst_fetch_ha.patch b/patches/0001-ib_core-backport-dst_fetch_ha.patch index 19d514d..a835b3d 100644 --- a/patches/0001-ib_core-backport-dst_fetch_ha.patch +++ b/patches/0001-ib_core-backport-dst_fetch_ha.patch @@ -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 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 --- - 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 diff --git a/patches/0002-ib-core-Backport-flowi4-and-flowi6.patch b/patches/0002-ib-core-Backport-flowi4-and-flowi6.patch index efee254..adfa992 100644 --- a/patches/0002-ib-core-Backport-flowi4-and-flowi6.patch +++ b/patches/0002-ib-core-Backport-flowi4-and-flowi6.patch @@ -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 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 --- @@ -9,10 +9,10 @@ Signed-off-by: Vladimir Sokolovsky 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 diff --git a/patches/0003-BACKPORT-core-netlink-for-kernels-3.4.patch b/patches/0003-BACKPORT-core-netlink-for-kernels-3.4.patch index d8617e5..c764105 100644 --- a/patches/0003-BACKPORT-core-netlink-for-kernels-3.4.patch +++ b/patches/0003-BACKPORT-core-netlink-for-kernels-3.4.patch @@ -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 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 --- @@ -32,5 +32,5 @@ index e497dfb..2ac867a 100644 } -- -1.7.1 +1.7.0.4 diff --git a/patches/0004-ib-core-Backport-pinned_vm-for-kernels-3.2.patch b/patches/0004-ib-core-Backport-pinned_vm-for-kernels-3.2.patch index 9ecf5fc..277cd15 100644 --- a/patches/0004-ib-core-Backport-pinned_vm-for-kernels-3.2.patch +++ b/patches/0004-ib-core-Backport-pinned_vm-for-kernels-3.2.patch @@ -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 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 --- @@ -61,5 +61,5 @@ index a841123..3b6cb84 100644 mmput(mm); kfree(umem); -- -1.7.1 +1.7.0.4 diff --git a/patches/0005-ib-core-Backport-CLASS_ATTR-for-kernels-2.6.34.patch b/patches/0005-ib-core-Backport-CLASS_ATTR-for-kernels-2.6.34.patch index 024afa8..1befd6c 100644 --- a/patches/0005-ib-core-Backport-CLASS_ATTR-for-kernels-2.6.34.patch +++ b/patches/0005-ib-core-Backport-CLASS_ATTR-for-kernels-2.6.34.patch @@ -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 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 --- @@ -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 diff --git a/patches/0006-Backport-mlx4_ib.patch b/patches/0006-Backport-mlx4_ib.patch index 459872a..ee0d2a1 100644 --- a/patches/0006-Backport-mlx4_ib.patch +++ b/patches/0006-Backport-mlx4_ib.patch @@ -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 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 --- @@ -37,5 +37,5 @@ index 3530c41..765bf3b 100644 dev_put(ndev); } -- -1.7.1 +1.7.0.4 diff --git a/patches/0007-BACKPORT-ucma-Revert-sysctl-registrations.patch b/patches/0007-BACKPORT-ucma-Revert-sysctl-registrations.patch index 7a6d172..c9ba19d 100644 --- a/patches/0007-BACKPORT-ucma-Revert-sysctl-registrations.patch +++ b/patches/0007-BACKPORT-ucma-Revert-sysctl-registrations.patch @@ -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 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 --- @@ -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-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch similarity index 95% rename from patches/0008-BACKPORT-nes-for-RHEL-6.2-6.3.patch rename to patches/0008-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch index e43bbf3..1992493 100644 --- a/patches/0008-BACKPORT-nes-for-RHEL-6.2-6.3.patch +++ b/patches/0008-RDMA-nes-Backports-for-RHEL-6.2-and-6.3.patch @@ -1,130 +1,131 @@ -From: Tatyana Nikolova -Subject: [PATCH] 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 ---- - 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..8544d0a 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.4.2 - - +From 80aaf4b94ca74d3d0c661932ec05d46da4c42022 Mon Sep 17 00:00:00 2001 +From: Tatyana Nikolova +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 +--- + 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 + -- 2.41.0