Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f96818a7 authored by Yunsheng Lin's avatar Yunsheng Lin Committed by David S. Miller
Browse files

net: hns3: fix for loopback failure when vlan filter is enable



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: default avatarYunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 64fd2300
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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);
}