diff mbox series

[RFCv2,net-next,039/167] dsa: use netdev feature helpers

Message ID 20210929155334.12454-40-shenjian15@huawei.com (mailing list archive)
State RFC
Delegated to: Netdev Maintainers
Headers show
Series net: extend the netdev_features_t | expand

Commit Message

shenjian (K) Sept. 29, 2021, 3:51 p.m. UTC
Use netdev_feature_xxx helpers to replace the logical operation
for netdev features.

Signed-off-by: Jian Shen <shenjian15@huawei.com>
---
 drivers/net/dsa/xrs700x/xrs700x.c |  6 ++++--
 net/dsa/slave.c                   | 24 +++++++++++++++---------
 2 files changed, 19 insertions(+), 11 deletions(-)
diff mbox series

Patch

diff --git a/drivers/net/dsa/xrs700x/xrs700x.c b/drivers/net/dsa/xrs700x/xrs700x.c
index 469420941054..f5b5807b2313 100644
--- a/drivers/net/dsa/xrs700x/xrs700x.c
+++ b/drivers/net/dsa/xrs700x/xrs700x.c
@@ -639,7 +639,8 @@  static int xrs700x_hsr_join(struct dsa_switch *ds, int port,
 	hsr_pair[1] = partner->index;
 	for (i = 0; i < ARRAY_SIZE(hsr_pair); i++) {
 		slave = dsa_to_port(ds, hsr_pair[i])->slave;
-		slave->features |= XRS7000X_SUPPORTED_HSR_FEATURES;
+		netdev_feature_set_bits(XRS7000X_SUPPORTED_HSR_FEATURES,
+					&slave->features);
 	}
 
 	return 0;
@@ -693,7 +694,8 @@  static int xrs700x_hsr_leave(struct dsa_switch *ds, int port,
 	hsr_pair[1] = partner->index;
 	for (i = 0; i < ARRAY_SIZE(hsr_pair); i++) {
 		slave = dsa_to_port(ds, hsr_pair[i])->slave;
-		slave->features &= ~XRS7000X_SUPPORTED_HSR_FEATURES;
+		netdev_feature_clear_bits(XRS7000X_SUPPORTED_HSR_FEATURES,
+					  &slave->features);
 	}
 
 	return 0;
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index a2bf2d8ac65b..dbd53653b5f0 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -1460,12 +1460,14 @@  int dsa_slave_manage_vlan_filtering(struct net_device *slave,
 	int err;
 
 	if (vlan_filtering) {
-		slave->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
+		netdev_feature_set_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
+				       &slave->features);
 
 		err = vlan_for_each(slave, dsa_slave_restore_vlan, slave);
 		if (err) {
 			vlan_for_each(slave, dsa_slave_clear_vlan, slave);
-			slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+			netdev_feature_clear_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
+						 &slave->features);
 			return err;
 		}
 	} else {
@@ -1473,7 +1475,8 @@  int dsa_slave_manage_vlan_filtering(struct net_device *slave,
 		if (err)
 			return err;
 
-		slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
+		netdev_feature_clear_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
+					 &slave->features);
 	}
 
 	return 0;
@@ -1883,13 +1886,16 @@  void dsa_slave_setup_tagger(struct net_device *slave)
 
 	p->xmit = cpu_dp->tag_ops->xmit;
 
-	slave->features = master->vlan_features | NETIF_F_HW_TC;
-	slave->hw_features |= NETIF_F_HW_TC;
-	slave->features |= NETIF_F_LLTX;
+	netdev_feature_copy(&slave->features, master->vlan_features);
+	netdev_feature_set_bit(NETIF_F_HW_TC_BIT, &slave->features);
+	netdev_feature_set_bit(NETIF_F_HW_TC_BIT, &slave->hw_features);
+	netdev_feature_set_bit(NETIF_F_LLTX_BIT, &slave->features);
 	if (slave->needed_tailroom)
-		slave->features &= ~(NETIF_F_SG | NETIF_F_FRAGLIST);
+		netdev_feature_clear_bits(NETIF_F_SG | NETIF_F_FRAGLIST,
+					  &slave->features);
 	if (ds->needs_standalone_vlan_filtering)
-		slave->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
+		netdev_feature_set_bit(NETIF_F_HW_VLAN_CTAG_FILTER_BIT,
+				       &slave->features);
 }
 
 static struct lock_class_key dsa_slave_netdev_xmit_lock_key;
@@ -1968,7 +1974,7 @@  int dsa_slave_create(struct dsa_port *port)
 
 	SET_NETDEV_DEV(slave_dev, port->ds->dev);
 	slave_dev->dev.of_node = port->dn;
-	slave_dev->vlan_features = master->vlan_features;
+	netdev_feature_copy(&slave_dev->vlan_features, master->vlan_features);
 
 	p = netdev_priv(slave_dev);
 	slave_dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);