net: hns3: Resume promisc mode and vlan filter status after loopback test
authorJian Shen <shenjian15@huawei.com>
Fri, 12 Oct 2018 14:34:06 +0000 (15:34 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 12 Oct 2018 18:23:45 +0000 (11:23 -0700)
This patch resumes promisc mode and vlan filter status after
loopback test.

Fixes: 3b75c3df599d ("net: hns3: net: hns3: Add support for IFF_ALLMULTI flag")
Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c

index f1354f61084f37a4f39c0c70e8bc1deca66a4086..a4762c2b8ba14d51d1b2f90eb239135dbea45910 100644 (file)
@@ -71,6 +71,7 @@ struct hns3_link_mode_mapping {
 static int hns3_lp_setup(struct net_device *ndev, enum hnae3_loop loop, bool en)
 {
        struct hnae3_handle *h = hns3_get_handle(ndev);
+       bool vlan_filter_enable;
        int ret;
 
        if (!h->ae_algo->ops->set_loopback ||
@@ -91,7 +92,14 @@ static int hns3_lp_setup(struct net_device *ndev, enum hnae3_loop loop, bool en)
        if (ret)
                return ret;
 
-       h->ae_algo->ops->set_promisc_mode(h, en, en);
+       if (en) {
+               h->ae_algo->ops->set_promisc_mode(h, true, true);
+       } else {
+               /* recover promisc mode before loopback test */
+               hns3_update_promisc_mode(ndev, h->netdev_flags);
+               vlan_filter_enable = ndev->flags & IFF_PROMISC ? false : true;
+               hns3_enable_vlan_filter(ndev, vlan_filter_enable);
+       }
 
        return ret;
 }