|
@@ -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;
|
|
|
}
|