net: hns3: refine function hns3_set_default_feature()
authorJian Shen <shenjian15@huawei.com>
Mon, 30 Aug 2021 13:51:06 +0000 (21:51 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 31 Aug 2021 11:36:42 +0000 (12:36 +0100)
Currently, the driver sets default feature for netdev->features,
netdev->hw_features, netdev->vlan_features and
netdev->hw_enc_features separately. It's fussy, because most
of the feature bits are same. So refine it by copy value from
netdev->features.

Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

index 0680d22..18dd962 100644 (file)
@@ -3126,11 +3126,6 @@ static void hns3_set_default_feature(struct net_device *netdev)
 
        netdev->priv_flags |= IFF_UNICAST_FLT;
 
-       netdev->hw_enc_features |= NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
-               NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_GSO_GRE |
-               NETIF_F_GSO_GRE_CSUM | NETIF_F_GSO_UDP_TUNNEL |
-               NETIF_F_SCTP_CRC | NETIF_F_TSO_MANGLEID | NETIF_F_FRAGLIST;
-
        netdev->gso_partial_features |= NETIF_F_GSO_GRE_CSUM;
 
        netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER |
@@ -3140,62 +3135,37 @@ static void hns3_set_default_feature(struct net_device *netdev)
                NETIF_F_GSO_GRE_CSUM | NETIF_F_GSO_UDP_TUNNEL |
                NETIF_F_SCTP_CRC | NETIF_F_FRAGLIST;
 
-       netdev->vlan_features |= NETIF_F_RXCSUM |
-               NETIF_F_SG | NETIF_F_GSO | NETIF_F_GRO |
-               NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_GSO_GRE |
-               NETIF_F_GSO_GRE_CSUM | NETIF_F_GSO_UDP_TUNNEL |
-               NETIF_F_SCTP_CRC | NETIF_F_FRAGLIST;
-
-       netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_TX |
-               NETIF_F_HW_VLAN_CTAG_RX |
-               NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
-               NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_GSO_GRE |
-               NETIF_F_GSO_GRE_CSUM | NETIF_F_GSO_UDP_TUNNEL |
-               NETIF_F_SCTP_CRC | NETIF_F_FRAGLIST;
-
        if (ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
-               netdev->hw_features |= NETIF_F_GRO_HW;
                netdev->features |= NETIF_F_GRO_HW;
 
-               if (!(h->flags & HNAE3_SUPPORT_VF)) {
-                       netdev->hw_features |= NETIF_F_NTUPLE;
+               if (!(h->flags & HNAE3_SUPPORT_VF))
                        netdev->features |= NETIF_F_NTUPLE;
-               }
        }
 
-       if (test_bit(HNAE3_DEV_SUPPORT_UDP_GSO_B, ae_dev->caps)) {
-               netdev->hw_features |= NETIF_F_GSO_UDP_L4;
+       if (test_bit(HNAE3_DEV_SUPPORT_UDP_GSO_B, ae_dev->caps))
                netdev->features |= NETIF_F_GSO_UDP_L4;
-               netdev->vlan_features |= NETIF_F_GSO_UDP_L4;
-               netdev->hw_enc_features |= NETIF_F_GSO_UDP_L4;
-       }
 
-       if (test_bit(HNAE3_DEV_SUPPORT_HW_TX_CSUM_B, ae_dev->caps)) {
-               netdev->hw_features |= NETIF_F_HW_CSUM;
+       if (test_bit(HNAE3_DEV_SUPPORT_HW_TX_CSUM_B, ae_dev->caps))
                netdev->features |= NETIF_F_HW_CSUM;
-               netdev->vlan_features |= NETIF_F_HW_CSUM;
-               netdev->hw_enc_features |= NETIF_F_HW_CSUM;
-       } else {
-               netdev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+       else
                netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-               netdev->vlan_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-               netdev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-       }
 
-       if (test_bit(HNAE3_DEV_SUPPORT_UDP_TUNNEL_CSUM_B, ae_dev->caps)) {
-               netdev->hw_features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
+       if (test_bit(HNAE3_DEV_SUPPORT_UDP_TUNNEL_CSUM_B, ae_dev->caps))
                netdev->features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
-               netdev->vlan_features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
-               netdev->hw_enc_features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
-       }
 
-       if (test_bit(HNAE3_DEV_SUPPORT_FD_FORWARD_TC_B, ae_dev->caps)) {
-               netdev->hw_features |= NETIF_F_HW_TC;
+       if (test_bit(HNAE3_DEV_SUPPORT_FD_FORWARD_TC_B, ae_dev->caps))
                netdev->features |= NETIF_F_HW_TC;
-       }
 
-       if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps))
-               netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER;
+       netdev->hw_features |= 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->vlan_features |= netdev->features &
+               ~(NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_CTAG_TX |
+                 NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_GRO_HW | NETIF_F_NTUPLE |
+                 NETIF_F_HW_TC);
+
+       netdev->hw_enc_features |= netdev->vlan_features | NETIF_F_TSO_MANGLEID;
 }
 
 static int hns3_alloc_buffer(struct hns3_enet_ring *ring,