[5/6] net/hns3: fix the strategy of getting link status for VF

Message ID 20191122120624.4963-6-xavier.huwei@tom.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series Fixes for hns3 PMD driver |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Wei Hu (Xavier) Nov. 22, 2019, 12:06 p.m. UTC
  From: Huisong Li <lihuisong@huawei.com>

Currently, port link status is "up" in VF driver after user calling the
rte_eth_dev_stop API. This is unreasonable.

Therefore, this patch adjusts the strategy of getting link status from
PF driver for VF. VF drvier should stop getting link status from PF by
canceling the alarm that VF driver send mailbox message to PF driver,
when the rte_eth_dev_stop API is called. And VF driver should restore
the alarm when the rte_eth_dev_start API is called.

Fixes: a5475d61fa34 ("net/hns3: support VF")
Cc: stable@dpdk.org

Signed-off-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
---
 drivers/net/hns3/hns3_ethdev_vf.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
  

Patch

diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
index 2274ac35e..b1736e73a 100644
--- a/drivers/net/hns3/hns3_ethdev_vf.c
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
@@ -1246,6 +1246,7 @@  hns3vf_dev_stop(struct rte_eth_dev *eth_dev)
 		hns3_dev_release_mbufs(hns);
 		hw->adapter_state = HNS3_NIC_CONFIGURED;
 	}
+	rte_eal_alarm_cancel(hns3vf_service_handler, eth_dev);
 	rte_spinlock_unlock(&hw->lock);
 }
 
@@ -1265,7 +1266,6 @@  hns3vf_dev_close(struct rte_eth_dev *eth_dev)
 	hns3_reset_abort(hns);
 	hw->adapter_state = HNS3_NIC_CLOSED;
 	rte_eal_alarm_cancel(hns3vf_keep_alive_handler, eth_dev);
-	rte_eal_alarm_cancel(hns3vf_service_handler, eth_dev);
 	hns3vf_configure_all_mc_mac_addr(hns, true);
 	hns3vf_remove_all_vlan_table(hns);
 	hns3vf_uninit_vf(eth_dev);
@@ -1286,8 +1286,6 @@  hns3vf_dev_link_update(struct rte_eth_dev *eth_dev,
 	struct hns3_mac *mac = &hw->mac;
 	struct rte_eth_link new_link;
 
-	hns3vf_request_link_info(hw);
-
 	memset(&new_link, 0, sizeof(new_link));
 	switch (mac->link_speed) {
 	case ETH_SPEED_NUM_10M:
@@ -1352,6 +1350,8 @@  hns3vf_dev_start(struct rte_eth_dev *eth_dev)
 	rte_spinlock_unlock(&hw->lock);
 	hns3_set_rxtx_function(eth_dev);
 	hns3_mp_req_start_rxtx(eth_dev);
+	rte_eal_alarm_set(HNS3VF_SERVICE_INTERVAL, hns3vf_service_handler,
+			  eth_dev);
 	return 0;
 }
 
@@ -1789,8 +1789,6 @@  hns3vf_dev_init(struct rte_eth_dev *eth_dev)
 	}
 	rte_eal_alarm_set(HNS3VF_KEEP_ALIVE_INTERVAL, hns3vf_keep_alive_handler,
 			  eth_dev);
-	rte_eal_alarm_set(HNS3VF_SERVICE_INTERVAL, hns3vf_service_handler,
-			  eth_dev);
 	return 0;
 
 err_rte_zmalloc: