diff mbox series

[RFCv2,net-next,161/167] net: openvswitch: use netdev feature helpers

Message ID 20210929155334.12454-162-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:53 p.m. UTC
Use netdev_feature_xxx helpers to replace the logical operation
for netdev features.

Signed-off-by: Jian Shen <shenjian15@huawei.com>
---
 net/openvswitch/datapath.c           |  5 ++++-
 net/openvswitch/vport-internal_dev.c | 24 +++++++++++++++---------
 2 files changed, 19 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 67ad08320886..dfb69428c6b2 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -320,10 +320,13 @@  static int queue_gso_packets(struct datapath *dp, struct sk_buff *skb,
 	unsigned int gso_type = skb_shinfo(skb)->gso_type;
 	struct sw_flow_key later_key;
 	struct sk_buff *segs, *nskb;
+	netdev_features_t feature;
 	int err;
 
 	BUILD_BUG_ON(sizeof(*OVS_CB(skb)) > SKB_GSO_CB_OFFSET);
-	segs = __skb_gso_segment(skb, NETIF_F_SG, false);
+	netdev_feature_zero(&feature);
+	netdev_feature_set_bit(NETIF_F_SG_BIT, &feature);
+	segs = __skb_gso_segment(skb, feature, false);
 	if (IS_ERR(segs))
 		return PTR_ERR(segs);
 	if (segs == NULL)
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 5b2ee9c1c00b..27b7322be008 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -108,14 +108,19 @@  static void do_setup(struct net_device *netdev)
 	netdev->ethtool_ops = &internal_dev_ethtool_ops;
 	netdev->rtnl_link_ops = &internal_dev_link_ops;
 
-	netdev->features = NETIF_F_LLTX | NETIF_F_SG | NETIF_F_FRAGLIST |
-			   NETIF_F_HIGHDMA | NETIF_F_HW_CSUM |
-			   NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL;
-
-	netdev->vlan_features = netdev->features;
-	netdev->hw_enc_features = netdev->features;
-	netdev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
-	netdev->hw_features = netdev->features & ~NETIF_F_LLTX;
+	netdev_feature_zero(&netdev->features);
+	netdev_feature_set_bits(NETIF_F_LLTX | NETIF_F_SG | NETIF_F_FRAGLIST |
+				NETIF_F_HIGHDMA | NETIF_F_HW_CSUM |
+				NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL,
+				&netdev->features);
+
+	netdev_feature_copy(&netdev->vlan_features, netdev->features);
+	netdev_feature_copy(&netdev->hw_enc_features, netdev->features);
+	netdev_feature_set_bits(NETIF_F_HW_VLAN_CTAG_TX |
+				NETIF_F_HW_VLAN_STAG_TX,
+				&netdev->features);
+	netdev_feature_copy(&netdev->hw_features, netdev->features);
+	netdev_feature_clear_bit(NETIF_F_LLTX_BIT, &netdev->hw_features);
 
 	eth_hw_addr_random(netdev);
 }
@@ -152,7 +157,8 @@  static struct vport *internal_dev_create(const struct vport_parms *parms)
 
 	/* Restrict bridge port to current netns. */
 	if (vport->port_no == OVSP_LOCAL)
-		vport->dev->features |= NETIF_F_NETNS_LOCAL;
+		netdev_feature_set_bit(NETIF_F_NETNS_LOCAL_BIT,
+				       &vport->dev->features);
 
 	rtnl_lock();
 	err = register_netdevice(vport->dev);