net: remove NETIF_F_NO_CSUM feature bit
Only distinct use is checking if NETIF_F_NOCACHE_COPY should be enabled by default. The check heuristics is altered a bit here, so it hits other people than before. The default shouldn't be trusted for performance-critical cases anyway. For all other uses NETIF_F_NO_CSUM is equivalent to NETIF_F_HW_CSUM. Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a861a8b233
commit
34324dc2bf
@ -343,7 +343,7 @@ static void ieee802154_fake_setup(struct net_device *dev)
|
|||||||
{
|
{
|
||||||
dev->addr_len = IEEE802154_ADDR_LEN;
|
dev->addr_len = IEEE802154_ADDR_LEN;
|
||||||
memset(dev->broadcast, 0xff, IEEE802154_ADDR_LEN);
|
memset(dev->broadcast, 0xff, IEEE802154_ADDR_LEN);
|
||||||
dev->features = NETIF_F_NO_CSUM;
|
dev->features = NETIF_F_HW_CSUM;
|
||||||
dev->needed_tailroom = 2; /* FCS */
|
dev->needed_tailroom = 2; /* FCS */
|
||||||
dev->mtu = 127;
|
dev->mtu = 127;
|
||||||
dev->tx_queue_len = 10;
|
dev->tx_queue_len = 10;
|
||||||
|
@ -576,7 +576,7 @@ xpnet_init(void)
|
|||||||
* report an error if the data is not retrievable and the
|
* report an error if the data is not retrievable and the
|
||||||
* packet will be dropped.
|
* packet will be dropped.
|
||||||
*/
|
*/
|
||||||
xpnet_device->features = NETIF_F_NO_CSUM;
|
xpnet_device->features = NETIF_F_HW_CSUM;
|
||||||
|
|
||||||
result = register_netdev(xpnet_device);
|
result = register_netdev(xpnet_device);
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
|
@ -4361,7 +4361,7 @@ static void bond_setup(struct net_device *bond_dev)
|
|||||||
NETIF_F_HW_VLAN_RX |
|
NETIF_F_HW_VLAN_RX |
|
||||||
NETIF_F_HW_VLAN_FILTER;
|
NETIF_F_HW_VLAN_FILTER;
|
||||||
|
|
||||||
bond_dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_NO_CSUM);
|
bond_dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_HW_CSUM);
|
||||||
bond_dev->features |= bond_dev->hw_features;
|
bond_dev->features |= bond_dev->hw_features;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,7 +454,7 @@ static void can_setup(struct net_device *dev)
|
|||||||
|
|
||||||
/* New-style flags. */
|
/* New-style flags. */
|
||||||
dev->flags = IFF_NOARP;
|
dev->flags = IFF_NOARP;
|
||||||
dev->features = NETIF_F_NO_CSUM;
|
dev->features = NETIF_F_HW_CSUM;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
|
struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
|
||||||
|
@ -387,7 +387,7 @@ static void slc_setup(struct net_device *dev)
|
|||||||
|
|
||||||
/* New-style flags. */
|
/* New-style flags. */
|
||||||
dev->flags = IFF_NOARP;
|
dev->flags = IFF_NOARP;
|
||||||
dev->features = NETIF_F_NO_CSUM;
|
dev->features = NETIF_F_HW_CSUM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
|
@ -134,7 +134,7 @@ static void dummy_setup(struct net_device *dev)
|
|||||||
dev->flags |= IFF_NOARP;
|
dev->flags |= IFF_NOARP;
|
||||||
dev->flags &= ~IFF_MULTICAST;
|
dev->flags &= ~IFF_MULTICAST;
|
||||||
dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO;
|
dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO;
|
||||||
dev->features |= NETIF_F_NO_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
|
dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
|
||||||
random_ether_addr(dev->dev_addr);
|
random_ether_addr(dev->dev_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ static const struct net_device_ops ifb_netdev_ops = {
|
|||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IFB_FEATURES (NETIF_F_NO_CSUM | NETIF_F_SG | NETIF_F_FRAGLIST | \
|
#define IFB_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_FRAGLIST | \
|
||||||
NETIF_F_TSO_ECN | NETIF_F_TSO | NETIF_F_TSO6 | \
|
NETIF_F_TSO_ECN | NETIF_F_TSO | NETIF_F_TSO6 | \
|
||||||
NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_TX)
|
NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_TX)
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ static void loopback_setup(struct net_device *dev)
|
|||||||
dev->features = NETIF_F_SG | NETIF_F_FRAGLIST
|
dev->features = NETIF_F_SG | NETIF_F_FRAGLIST
|
||||||
| NETIF_F_ALL_TSO
|
| NETIF_F_ALL_TSO
|
||||||
| NETIF_F_UFO
|
| NETIF_F_UFO
|
||||||
| NETIF_F_NO_CSUM
|
| NETIF_F_HW_CSUM
|
||||||
| NETIF_F_RXCSUM
|
| NETIF_F_RXCSUM
|
||||||
| NETIF_F_HIGHDMA
|
| NETIF_F_HIGHDMA
|
||||||
| NETIF_F_LLTX
|
| NETIF_F_LLTX
|
||||||
|
@ -271,7 +271,7 @@ static void veth_setup(struct net_device *dev)
|
|||||||
dev->features |= NETIF_F_LLTX;
|
dev->features |= NETIF_F_LLTX;
|
||||||
dev->destructor = veth_dev_free;
|
dev->destructor = veth_dev_free;
|
||||||
|
|
||||||
dev->hw_features = NETIF_F_NO_CSUM | NETIF_F_SG | NETIF_F_RXCSUM;
|
dev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_RXCSUM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -17,7 +17,7 @@ typedef u64 netdev_features_t;
|
|||||||
enum {
|
enum {
|
||||||
NETIF_F_SG_BIT, /* Scatter/gather IO. */
|
NETIF_F_SG_BIT, /* Scatter/gather IO. */
|
||||||
NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */
|
NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */
|
||||||
NETIF_F_NO_CSUM_BIT, /* Does not require checksum. F.e. loopack. */
|
__UNUSED_NETIF_F_1,
|
||||||
NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */
|
NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */
|
||||||
NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */
|
NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */
|
||||||
NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */
|
NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */
|
||||||
@ -88,7 +88,6 @@ enum {
|
|||||||
#define NETIF_F_LRO __NETIF_F(LRO)
|
#define NETIF_F_LRO __NETIF_F(LRO)
|
||||||
#define NETIF_F_NETNS_LOCAL __NETIF_F(NETNS_LOCAL)
|
#define NETIF_F_NETNS_LOCAL __NETIF_F(NETNS_LOCAL)
|
||||||
#define NETIF_F_NOCACHE_COPY __NETIF_F(NOCACHE_COPY)
|
#define NETIF_F_NOCACHE_COPY __NETIF_F(NOCACHE_COPY)
|
||||||
#define NETIF_F_NO_CSUM __NETIF_F(NO_CSUM)
|
|
||||||
#define NETIF_F_NTUPLE __NETIF_F(NTUPLE)
|
#define NETIF_F_NTUPLE __NETIF_F(NTUPLE)
|
||||||
#define NETIF_F_RXCSUM __NETIF_F(RXCSUM)
|
#define NETIF_F_RXCSUM __NETIF_F(RXCSUM)
|
||||||
#define NETIF_F_RXHASH __NETIF_F(RXHASH)
|
#define NETIF_F_RXHASH __NETIF_F(RXHASH)
|
||||||
@ -118,7 +117,7 @@ enum {
|
|||||||
#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | \
|
#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | \
|
||||||
NETIF_F_TSO6 | NETIF_F_UFO)
|
NETIF_F_TSO6 | NETIF_F_UFO)
|
||||||
|
|
||||||
#define NETIF_F_GEN_CSUM (NETIF_F_HW_CSUM | NETIF_F_NO_CSUM)
|
#define NETIF_F_GEN_CSUM NETIF_F_HW_CSUM
|
||||||
#define NETIF_F_V4_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
|
#define NETIF_F_V4_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
|
||||||
#define NETIF_F_V6_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
|
#define NETIF_F_V6_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
|
||||||
#define NETIF_F_ALL_CSUM (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
|
#define NETIF_F_ALL_CSUM (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
|
||||||
|
@ -88,7 +88,6 @@
|
|||||||
* at device setup time.
|
* at device setup time.
|
||||||
* NETIF_F_HW_CSUM - it is clever device, it is able to checksum
|
* NETIF_F_HW_CSUM - it is clever device, it is able to checksum
|
||||||
* everything.
|
* everything.
|
||||||
* NETIF_F_NO_CSUM - loopback or reliable single hop media.
|
|
||||||
* NETIF_F_IP_CSUM - device is dumb. It is able to csum only
|
* NETIF_F_IP_CSUM - device is dumb. It is able to csum only
|
||||||
* TCP/UDP over IPv4. Sigh. Vendors like this
|
* TCP/UDP over IPv4. Sigh. Vendors like this
|
||||||
* way by an unknown reason. Though, see comment above
|
* way by an unknown reason. Though, see comment above
|
||||||
|
@ -342,10 +342,10 @@ void br_dev_setup(struct net_device *dev)
|
|||||||
dev->priv_flags = IFF_EBRIDGE;
|
dev->priv_flags = IFF_EBRIDGE;
|
||||||
|
|
||||||
dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
|
dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
|
||||||
NETIF_F_GSO_MASK | NETIF_F_NO_CSUM | NETIF_F_LLTX |
|
NETIF_F_GSO_MASK | NETIF_F_HW_CSUM | NETIF_F_LLTX |
|
||||||
NETIF_F_NETNS_LOCAL | NETIF_F_HW_VLAN_TX;
|
NETIF_F_NETNS_LOCAL | NETIF_F_HW_VLAN_TX;
|
||||||
dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
|
dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
|
||||||
NETIF_F_GSO_MASK | NETIF_F_NO_CSUM |
|
NETIF_F_GSO_MASK | NETIF_F_HW_CSUM |
|
||||||
NETIF_F_HW_VLAN_TX;
|
NETIF_F_HW_VLAN_TX;
|
||||||
|
|
||||||
br->dev = dev;
|
br->dev = dev;
|
||||||
|
@ -5362,12 +5362,6 @@ static netdev_features_t netdev_fix_features(struct net_device *dev,
|
|||||||
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
|
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((features & NETIF_F_NO_CSUM) &&
|
|
||||||
(features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
|
|
||||||
netdev_warn(dev, "mixed no checksumming and other settings.\n");
|
|
||||||
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fix illegal SG+CSUM combinations. */
|
/* Fix illegal SG+CSUM combinations. */
|
||||||
if ((features & NETIF_F_SG) &&
|
if ((features & NETIF_F_SG) &&
|
||||||
!(features & NETIF_F_ALL_CSUM)) {
|
!(features & NETIF_F_ALL_CSUM)) {
|
||||||
@ -5624,11 +5618,12 @@ int register_netdevice(struct net_device *dev)
|
|||||||
dev->wanted_features = dev->features & dev->hw_features;
|
dev->wanted_features = dev->features & dev->hw_features;
|
||||||
|
|
||||||
/* Turn on no cache copy if HW is doing checksum */
|
/* Turn on no cache copy if HW is doing checksum */
|
||||||
dev->hw_features |= NETIF_F_NOCACHE_COPY;
|
if (!(dev->flags & IFF_LOOPBACK)) {
|
||||||
if ((dev->features & NETIF_F_ALL_CSUM) &&
|
dev->hw_features |= NETIF_F_NOCACHE_COPY;
|
||||||
!(dev->features & NETIF_F_NO_CSUM)) {
|
if (dev->features & NETIF_F_ALL_CSUM) {
|
||||||
dev->wanted_features |= NETIF_F_NOCACHE_COPY;
|
dev->wanted_features |= NETIF_F_NOCACHE_COPY;
|
||||||
dev->features |= NETIF_F_NOCACHE_COPY;
|
dev->features |= NETIF_F_NOCACHE_COPY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make NETIF_F_HIGHDMA inheritable to VLAN devices.
|
/* Make NETIF_F_HIGHDMA inheritable to VLAN devices.
|
||||||
@ -6374,10 +6369,6 @@ netdev_features_t netdev_increment_features(netdev_features_t all,
|
|||||||
all |= one & (NETIF_F_ONE_FOR_ALL|NETIF_F_ALL_CSUM) & mask;
|
all |= one & (NETIF_F_ONE_FOR_ALL|NETIF_F_ALL_CSUM) & mask;
|
||||||
all &= one | ~NETIF_F_ALL_FOR_ALL;
|
all &= one | ~NETIF_F_ALL_FOR_ALL;
|
||||||
|
|
||||||
/* If device needs checksumming, downgrade to it. */
|
|
||||||
if (all & (NETIF_F_ALL_CSUM & ~NETIF_F_NO_CSUM))
|
|
||||||
all &= ~NETIF_F_NO_CSUM;
|
|
||||||
|
|
||||||
/* If one device supports hw checksumming, set for all. */
|
/* If one device supports hw checksumming, set for all. */
|
||||||
if (all & NETIF_F_GEN_CSUM)
|
if (all & NETIF_F_GEN_CSUM)
|
||||||
all &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
|
all &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
|
||||||
|
@ -43,7 +43,6 @@ EXPORT_SYMBOL(ethtool_op_get_link);
|
|||||||
static const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] = {
|
static const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] = {
|
||||||
[NETIF_F_SG_BIT] = "tx-scatter-gather",
|
[NETIF_F_SG_BIT] = "tx-scatter-gather",
|
||||||
[NETIF_F_IP_CSUM_BIT] = "tx-checksum-ipv4",
|
[NETIF_F_IP_CSUM_BIT] = "tx-checksum-ipv4",
|
||||||
[NETIF_F_NO_CSUM_BIT] = "tx-checksum-unneeded",
|
|
||||||
[NETIF_F_HW_CSUM_BIT] = "tx-checksum-ip-generic",
|
[NETIF_F_HW_CSUM_BIT] = "tx-checksum-ip-generic",
|
||||||
[NETIF_F_IPV6_CSUM_BIT] = "tx-checksum-ipv6",
|
[NETIF_F_IPV6_CSUM_BIT] = "tx-checksum-ipv6",
|
||||||
[NETIF_F_HIGHDMA_BIT] = "highdma",
|
[NETIF_F_HIGHDMA_BIT] = "highdma",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user