From: Michał Mirosław Date: Tue, 30 Nov 2010 06:38:00 +0000 (+0000) Subject: net: Fix too optimistic NETIF_F_HW_CSUM features X-Git-Tag: bp-1.0.8~11 X-Git-Url: http://bbs.cooldavid.org/git/?p=jme.git;a=commitdiff_plain;h=1a0b42f41b88ca2b74138c83fb0d5485bb84b421;hp=8c61b2bcc4f6f9f825c298fa1cc1ce395cd77045 net: Fix too optimistic NETIF_F_HW_CSUM features 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 --- 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 */