@@ -3321,7 +3321,7 @@ static void hns3_set_default_feature(struct net_device *netdev)
netdev_hw_features_set(netdev, netdev->features);
if (!test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps))
- netdev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+ netdev_hw_feature_del(netdev, NETIF_F_HW_VLAN_CTAG_FILTER_BIT);
netdev_features_zero(&vlan_off_features);
netdev_features_set_array(&hns3_vlan_off_feature_set,
@@ -246,7 +246,8 @@ static int efx_ef10_vadaptor_alloc_set_features(struct efx_nic *efx)
netdev_feature_add(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
&efx->fixed_features);
else
- efx->fixed_features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+ netdev_feature_del(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
+ &efx->fixed_features);
return 0;
@@ -1033,13 +1033,13 @@ static int efx_pci_probe_post_io(struct efx_nic *efx)
netdev_hw_features_set(net_dev, tmp);
/* Disable receiving frames with bad FCS, by default. */
- net_dev->features &= ~NETIF_F_RXALL;
+ netdev_active_feature_del(net_dev, NETIF_F_RXALL_BIT);
/* Disable VLAN filtering by default. It may be enforced if
* the feature is fixed (i.e. VLAN filters are required to
* receive VLAN tagged packets due to vPort restrictions).
*/
- net_dev->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+ netdev_active_feature_del(net_dev, NETIF_F_HW_VLAN_CTAG_FILTER_BIT);
netdev_active_features_set(net_dev, efx->fixed_features);
rc = efx_register_netdev(efx);
@@ -2925,7 +2925,7 @@ static int ef4_pci_probe(struct pci_dev *pci_dev,
* the feature is fixed (i.e. VLAN filters are required to
* receive VLAN tagged packets due to vPort restrictions).
*/
- net_dev->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+ netdev_active_feature_del(net_dev, NETIF_F_HW_VLAN_CTAG_FILTER_BIT);
netdev_active_features_set(net_dev, efx->fixed_features);
rc = ef4_register_netdev(efx);
@@ -1326,9 +1326,12 @@ int efx_mcdi_filter_table_probe(struct efx_nic *efx, bool multicast_chaining)
(EFX_FILTER_MATCH_OUTER_VID | EFX_FILTER_MATCH_LOC_MAC_IG)))) {
netif_info(efx, probe, net_dev,
"VLAN filters are not supported in this firmware variant\n");
- net_dev->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
- efx->fixed_features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
- net_dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+ netdev_active_feature_del(net_dev,
+ NETIF_F_HW_VLAN_CTAG_FILTER_BIT);
+ netdev_feature_del(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
+ &efx->fixed_features);
+ netdev_hw_feature_del(net_dev,
+ NETIF_F_HW_VLAN_CTAG_FILTER_BIT);
}
table->entry = vzalloc(array_size(EFX_MCDI_FILTER_TBL_ROWS,
@@ -1583,7 +1583,7 @@ void dev_disable_lro(struct net_device *dev)
struct net_device *lower_dev;
struct list_head *iter;
- dev->wanted_features &= ~NETIF_F_LRO;
+ netdev_wanted_feature_del(dev, NETIF_F_LRO_BIT);
netdev_update_features(dev);
if (unlikely(dev->features & NETIF_F_LRO))
@@ -1604,7 +1604,7 @@ EXPORT_SYMBOL(dev_disable_lro);
*/
static void dev_disable_gro_hw(struct net_device *dev)
{
- dev->wanted_features &= ~NETIF_F_GRO_HW;
+ netdev_wanted_feature_del(dev, NETIF_F_GRO_HW_BIT);
netdev_update_features(dev);
if (unlikely(dev->features & NETIF_F_GRO_HW))
@@ -3346,7 +3346,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
partial_features = dev->features & dev->gso_partial_features;
netdev_feature_add(NETIF_F_GSO_ROBUST_BIT, &partial_features);
if (!skb_gso_ok(skb, netdev_features_or(features, partial_features)))
- features &= ~NETIF_F_GSO_PARTIAL;
+ netdev_feature_del(NETIF_F_GSO_PARTIAL_BIT, &features);
}
BUILD_BUG_ON(SKB_GSO_CB_OFFSET +
@@ -3436,7 +3436,7 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
features &= ~netdev_csum_gso_features_mask;
}
if (illegal_highdma(skb->dev, skb))
- features &= ~NETIF_F_SG;
+ netdev_feature_del(NETIF_F_SG_BIT, &features);
return features;
}
@@ -3487,7 +3487,8 @@ static netdev_features_t gso_features_check(const struct sk_buff *skb,
inner_ip_hdr(skb) : ip_hdr(skb);
if (!(iph->frag_off & htons(IP_DF)))
- features &= ~NETIF_F_TSO_MANGLEID;
+ netdev_feature_del(NETIF_F_TSO_MANGLEID_BIT,
+ &features);
}
return features;
@@ -9516,30 +9517,30 @@ static netdev_features_t netdev_fix_features(struct net_device *dev,
if ((features & NETIF_F_TSO) && !(features & NETIF_F_HW_CSUM) &&
!(features & NETIF_F_IP_CSUM)) {
netdev_dbg(dev, "Dropping TSO features since no CSUM feature.\n");
- features &= ~NETIF_F_TSO;
- features &= ~NETIF_F_TSO_ECN;
+ netdev_feature_del(NETIF_F_TSO_BIT, &features);
+ netdev_feature_del(NETIF_F_TSO_ECN_BIT, &features);
}
if ((features & NETIF_F_TSO6) && !(features & NETIF_F_HW_CSUM) &&
!(features & NETIF_F_IPV6_CSUM)) {
netdev_dbg(dev, "Dropping TSO6 features since no CSUM feature.\n");
- features &= ~NETIF_F_TSO6;
+ netdev_feature_del(NETIF_F_TSO6_BIT, &features);
}
/* TSO with IPv4 ID mangling requires IPv4 TSO be enabled */
if ((features & NETIF_F_TSO_MANGLEID) && !(features & NETIF_F_TSO))
- features &= ~NETIF_F_TSO_MANGLEID;
+ netdev_feature_del(NETIF_F_TSO_MANGLEID_BIT, &features);
/* TSO ECN requires that TSO is present as well. */
tmp = NETIF_F_ALL_TSO;
- tmp &= ~NETIF_F_TSO_ECN;
+ netdev_feature_del(NETIF_F_TSO_ECN_BIT, &tmp);
if (!(features & tmp) && (features & NETIF_F_TSO_ECN))
- features &= ~NETIF_F_TSO_ECN;
+ netdev_feature_del(NETIF_F_TSO_ECN_BIT, &features);
/* Software GSO depends on SG. */
if ((features & NETIF_F_GSO) && !(features & NETIF_F_SG)) {
netdev_dbg(dev, "Dropping NETIF_F_GSO since no SG feature.\n");
- features &= ~NETIF_F_GSO;
+ netdev_feature_del(NETIF_F_GSO_BIT, &features);
}
/* GSO partial features require GSO partial be set */
@@ -9558,7 +9559,7 @@ static netdev_features_t netdev_fix_features(struct net_device *dev,
*/
if (features & NETIF_F_GRO_HW) {
netdev_dbg(dev, "Dropping NETIF_F_GRO_HW since no RXCSUM feature.\n");
- features &= ~NETIF_F_GRO_HW;
+ netdev_feature_del(NETIF_F_GRO_HW_BIT, &features);
}
}
@@ -9566,18 +9567,18 @@ static netdev_features_t netdev_fix_features(struct net_device *dev,
if (features & NETIF_F_RXFCS) {
if (features & NETIF_F_LRO) {
netdev_dbg(dev, "Dropping LRO feature since RX-FCS is requested.\n");
- features &= ~NETIF_F_LRO;
+ netdev_feature_del(NETIF_F_LRO_BIT, &features);
}
if (features & NETIF_F_GRO_HW) {
netdev_dbg(dev, "Dropping HW-GRO feature since RX-FCS is requested.\n");
- features &= ~NETIF_F_GRO_HW;
+ netdev_feature_del(NETIF_F_GRO_HW_BIT, &features);
}
}
if ((features & NETIF_F_GRO_HW) && (features & NETIF_F_LRO)) {
netdev_dbg(dev, "Dropping LRO feature since HW-GRO is requested.\n");
- features &= ~NETIF_F_LRO;
+ netdev_feature_del(NETIF_F_LRO_BIT, &features);
}
if (features & NETIF_F_HW_TLS_TX) {
@@ -9587,13 +9588,13 @@ static netdev_features_t netdev_fix_features(struct net_device *dev,
if (!ip_csum && !hw_csum) {
netdev_dbg(dev, "Dropping TLS TX HW offload feature since no CSUM feature.\n");
- features &= ~NETIF_F_HW_TLS_TX;
+ netdev_feature_del(NETIF_F_HW_TLS_TX_BIT, &features);
}
}
if ((features & NETIF_F_HW_TLS_RX) && !(features & NETIF_F_RXCSUM)) {
netdev_dbg(dev, "Dropping TLS RX HW offload feature since no RXCSUM feature.\n");
- features &= ~NETIF_F_HW_TLS_RX;
+ netdev_feature_del(NETIF_F_HW_TLS_RX_BIT, &features);
}
return features;
@@ -11072,7 +11073,7 @@ netdev_features_t netdev_increment_features(netdev_features_t all,
/* If one device supports hw checksumming, set for all. */
if (all & NETIF_F_HW_CSUM) {
tmp = NETIF_F_CSUM_MASK;
- tmp &= ~NETIF_F_HW_CSUM;
+ netdev_feature_del(NETIF_F_HW_CSUM_BIT, &tmp);
all &= ~tmp;
}
Replace the '&~' and '&= ~' operations of single feature bit by netdev_feature_del helpers. Signed-off-by: Jian Shen <shenjian15@huawei.com> --- .../net/ethernet/hisilicon/hns3/hns3_enet.c | 2 +- drivers/net/ethernet/sfc/ef10_sriov.c | 3 +- drivers/net/ethernet/sfc/efx.c | 4 +- drivers/net/ethernet/sfc/falcon/efx.c | 2 +- drivers/net/ethernet/sfc/mcdi_filters.c | 9 +++-- net/core/dev.c | 39 ++++++++++--------- 6 files changed, 32 insertions(+), 27 deletions(-)