@@ -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)
@@ -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);
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(-)