]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
net: hns3: fix for loopback failure when vlan filter is enable
authorYunsheng Lin <linyunsheng@huawei.com>
Sat, 10 Mar 2018 03:29:28 +0000 (11:29 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Mar 2018 02:53:32 +0000 (22:53 -0400)
When vlan ctag filter is enabled, the loopback selftest fails because
loopback selftest does not support vlan.

This patch fixes it by disabling the vlan ctag filter when runnig
loopback selftest.

Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c

index 26274bca8b3d71c264def0f1e1a92bafc25171c1..2db127c7e463ff57f138404205bd5a6d14641bc9 100644 (file)
@@ -309,6 +309,9 @@ static void hns3_self_test(struct net_device *ndev,
        struct hnae3_handle *h = priv->ae_handle;
        int st_param[HNS3_SELF_TEST_TPYE_NUM][2];
        bool if_running = netif_running(ndev);
+#if IS_ENABLED(CONFIG_VLAN_8021Q)
+       bool dis_vlan_filter;
+#endif
        int test_index = 0;
        u32 i;
 
@@ -323,6 +326,14 @@ static void hns3_self_test(struct net_device *ndev,
        if (if_running)
                dev_close(ndev);
 
+#if IS_ENABLED(CONFIG_VLAN_8021Q)
+       /* Disable the vlan filter for selftest does not support it */
+       dis_vlan_filter = (ndev->features & NETIF_F_HW_VLAN_CTAG_FILTER) &&
+                               h->ae_algo->ops->enable_vlan_filter;
+       if (dis_vlan_filter)
+               h->ae_algo->ops->enable_vlan_filter(h, false);
+#endif
+
        set_bit(HNS3_NIC_STATE_TESTING, &priv->state);
 
        for (i = 0; i < HNS3_SELF_TEST_TPYE_NUM; i++) {
@@ -345,6 +356,11 @@ static void hns3_self_test(struct net_device *ndev,
 
        clear_bit(HNS3_NIC_STATE_TESTING, &priv->state);
 
+#if IS_ENABLED(CONFIG_VLAN_8021Q)
+       if (dis_vlan_filter)
+               h->ae_algo->ops->enable_vlan_filter(h, true);
+#endif
+
        if (if_running)
                dev_open(ndev);
 }