| From 162ed1717319c5fa1512fd7ddf29cbb98e5d3046 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 29 Sep 2021 17:35:55 +0800 |
| Subject: net: hns3: fix always enable rx vlan filter problem after selftest |
| |
| From: Guangbin Huang <huangguangbin2@huawei.com> |
| |
| [ Upstream commit 27bf4af69fcb9845fb2f0076db5d562ec072e70f ] |
| |
| Currently, the rx vlan filter will always be disabled before selftest and |
| be enabled after selftest as the rx vlan filter feature is fixed on in |
| old device earlier than V3. |
| |
| However, this feature is not fixed in some new devices and it can be |
| disabled by user. In this case, it is wrong if rx vlan filter is enabled |
| after selftest. So fix it. |
| |
| Fixes: bcc26e8dc432 ("net: hns3: remove unused code in hns3_self_test()") |
| Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c |
| index 436d777cce06..cd0d7a546957 100644 |
| --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c |
| +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c |
| @@ -336,7 +336,8 @@ static void hns3_selftest_prepare(struct net_device *ndev, |
| |
| #if IS_ENABLED(CONFIG_VLAN_8021Q) |
| /* Disable the vlan filter for selftest does not support it */ |
| - if (h->ae_algo->ops->enable_vlan_filter) |
| + if (h->ae_algo->ops->enable_vlan_filter && |
| + ndev->features & NETIF_F_HW_VLAN_CTAG_FILTER) |
| h->ae_algo->ops->enable_vlan_filter(h, false); |
| #endif |
| |
| @@ -361,7 +362,8 @@ static void hns3_selftest_restore(struct net_device *ndev, bool if_running) |
| h->ae_algo->ops->halt_autoneg(h, false); |
| |
| #if IS_ENABLED(CONFIG_VLAN_8021Q) |
| - if (h->ae_algo->ops->enable_vlan_filter) |
| + if (h->ae_algo->ops->enable_vlan_filter && |
| + ndev->features & NETIF_F_HW_VLAN_CTAG_FILTER) |
| h->ae_algo->ops->enable_vlan_filter(h, true); |
| #endif |
| |
| -- |
| 2.33.0 |
| |