@@ -2454,7 +2454,7 @@ static int hns3_nic_set_features(struct net_device *netdev,
return ret;
}
- netdev->features = features;
+ netdev_active_features_copy(netdev, features);
return 0;
}
@@ -1371,7 +1371,7 @@ static int efx_ef10_init_nic(struct efx_nic *efx)
netdev_feature_add(NETIF_F_TSO_BIT, &hw_enc_features);
netdev_active_features_set(efx->net_dev, encap_tso_features);
}
- efx->net_dev->hw_enc_features = hw_enc_features;
+ netdev_hw_enc_features_copy(efx->net_dev, hw_enc_features);
/* don't fail init if RSS setup doesn't work */
rc = efx->type->rx_push_rss_config(efx, false,
@@ -2920,8 +2920,8 @@ static int ef4_pci_probe(struct pci_dev *pci_dev,
netdev_active_feature_add(net_dev, NETIF_F_RXCSUM_BIT);
/* Mask for features that also apply to VLAN devices */
netdev_vlan_features_set_array(net_dev, &efx_vlan_feature_set);
- net_dev->hw_features = netdev_active_features_andnot(net_dev,
- efx->fixed_features);
+ netdev_hw_features_copy(net_dev,
+ netdev_active_features_andnot(net_dev, efx->fixed_features));
/* Disable VLAN filtering by default. It may be enforced if
* the feature is fixed (i.e. VLAN filters are required to
@@ -9675,7 +9675,7 @@ int __netdev_update_features(struct net_device *dev)
*/
if (netdev_feature_test(NETIF_F_RX_UDP_TUNNEL_PORT_BIT,
features)) {
- dev->features = features;
+ netdev_active_features_copy(dev, features);
udp_tunnel_get_rx_info(dev);
} else {
udp_tunnel_drop_rx_info(dev);
@@ -9685,7 +9685,7 @@ int __netdev_update_features(struct net_device *dev)
if (netdev_feature_test(NETIF_F_HW_VLAN_CTAG_FILTER_BIT, diff)) {
if (netdev_feature_test(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
features)) {
- dev->features = features;
+ netdev_active_features_copy(dev, features);
err |= vlan_get_rx_ctag_filter_info(dev);
} else {
vlan_drop_rx_ctag_filter_info(dev);
@@ -9695,14 +9695,14 @@ int __netdev_update_features(struct net_device *dev)
if (netdev_feature_test(NETIF_F_HW_VLAN_STAG_FILTER_BIT, diff)) {
if (netdev_feature_test(NETIF_F_HW_VLAN_STAG_FILTER_BIT,
features)) {
- dev->features = features;
+ netdev_active_features_copy(dev, features);
err |= vlan_get_rx_stag_filter_info(dev);
} else {
vlan_drop_rx_stag_filter_info(dev);
}
}
- dev->features = features;
+ netdev_active_features_copy(dev, features);
}
return err < 0 ? 0 : 1;
@@ -9955,8 +9955,8 @@ int register_netdevice(struct net_device *dev)
netdev_hw_feature_add(dev, NETIF_F_RX_UDP_TUNNEL_PORT_BIT);
}
- dev->wanted_features = netdev_active_features_and(dev,
- dev->hw_features);
+ netdev_wanted_features_copy(dev,
+ netdev_active_features_and(dev, dev->hw_features));
if (!(dev->flags & IFF_LOOPBACK))
netdev_hw_feature_add(dev, NETIF_F_NOCACHE_COPY_BIT);
Replace the direct assignment for features members of netdev with netdev_features_copy helpers, for the nic drivers are not supposed to modify netdev_features directly Signed-off-by: Jian Shen <shenjian15@huawei.com> --- drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 2 +- drivers/net/ethernet/sfc/ef10.c | 2 +- drivers/net/ethernet/sfc/falcon/efx.c | 4 ++-- net/core/dev.c | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-)