From 1a0b42f41b88ca2b74138c83fb0d5485bb84b421 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20Miros=C5=82aw?= Date: Tue, 30 Nov 2010 06:38:00 +0000 Subject: [PATCH] net: Fix too optimistic NETIF_F_HW_CSUM features MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit NETIF_F_HW_CSUM is a superset of NETIF_F_IP_CSUM+NETIF_F_IPV6_CSUM, but some drivers miss the difference. Fix this and also fix UFO dependency on checksumming offload as it makes the same mistake in assumptions. Signed-off-by: Michał Mirosław Acked-by: Jon Mason Signed-off-by: David S. Miller --- jme.c | 39 ++++++++++++--------------------------- jme.h | 7 +++++++ 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/jme.c b/jme.c index 5e83dd8..2dd1ac7 100644 --- a/jme.c +++ b/jme.c @@ -2150,21 +2150,13 @@ jme_change_mtu(struct net_device *netdev, int new_mtu) } if (new_mtu > 1900) { - netdev->features &= ~(NETIF_F_HW_CSUM | - NETIF_F_TSO -#ifdef NETIF_F_TSO6 - | NETIF_F_TSO6 -#endif - ); + netdev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | + NETIF_F_TSO | NETIF_F_TSO6); } else { if (test_bit(JME_FLAG_TXCSUM, &jme->flags)) - netdev->features |= NETIF_F_HW_CSUM; + netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; if (test_bit(JME_FLAG_TSO, &jme->flags)) - netdev->features |= NETIF_F_TSO -#ifdef NETIF_F_TSO6 - | NETIF_F_TSO6 -#endif - ; + netdev->features |= NETIF_F_TSO | NETIF_F_TSO6; } netdev->mtu = new_mtu; @@ -2613,10 +2605,12 @@ jme_set_tx_csum(struct net_device *netdev, u32 on) if (on) { set_bit(JME_FLAG_TXCSUM, &jme->flags); if (netdev->mtu <= 1900) - netdev->features |= NETIF_F_HW_CSUM; + netdev->features |= + NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; } else { clear_bit(JME_FLAG_TXCSUM, &jme->flags); - netdev->features &= ~NETIF_F_HW_CSUM; + netdev->features &= + ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); } return 0; @@ -2630,18 +2624,10 @@ jme_set_tso(struct net_device *netdev, u32 on) if (on) { set_bit(JME_FLAG_TSO, &jme->flags); if (netdev->mtu <= 1900) - netdev->features |= NETIF_F_TSO -#ifdef NETIF_F_TSO6 - | NETIF_F_TSO6 -#endif - ; + netdev->features |= NETIF_F_TSO | NETIF_F_TSO6; } else { clear_bit(JME_FLAG_TSO, &jme->flags); - netdev->features &= ~(NETIF_F_TSO -#ifdef NETIF_F_TSO6 - | NETIF_F_TSO6 -#endif - ); + netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6); } return 0; @@ -2949,12 +2935,11 @@ jme_init_one(struct pci_dev *pdev, #endif netdev->ethtool_ops = &jme_ethtool_ops; netdev->watchdog_timeo = TX_TIMEOUT; - netdev->features = NETIF_F_HW_CSUM | + netdev->features = NETIF_F_IP_CSUM | + NETIF_F_IPV6_CSUM | NETIF_F_SG | NETIF_F_TSO | -#ifdef NETIF_F_TSO6 NETIF_F_TSO6 | -#endif NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; if (using_dac) diff --git a/jme.h b/jme.h index 7eed870..531a1f1 100644 --- a/jme.h +++ b/jme.h @@ -100,6 +100,13 @@ do { \ msg_ ## type(priv, fmt, ## args) #endif +#ifndef NETIF_F_TSO6 +#define NETIF_F_TSO6 0 +#endif +#ifndef NETIF_F_IPV6_CSUM +#define NETIF_F_IPV6_CSUM 0 +#endif + /* * Extra PCI Configuration space interface */ -- 2.39.3