And patchs are as follows: - net/hns3: fix burst mode query with dummy function - net/hns3: add debug info for Rx/Tx dummy function - net/hns3: remove debug condition for Tx prepare - net/hns3: separate Tx prepare from getting Tx function - net/hns3: make getting Tx function static - net/hns3: extract common functions to set Rx/Tx
197 lines
6.6 KiB
Diff
197 lines
6.6 KiB
Diff
From a83eecfe38a20bbfa51a108f62d55d6189e943d7 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Sat, 11 Feb 2023 17:18:30 +0800
|
|
Subject: net/hns3: extract common functions to set Rx/Tx
|
|
|
|
[ upstream commit 4ba28c957a16bbfe5b2a8d49dfda1c85387d7602 ]
|
|
|
|
Extract two common functions to set Rx/Tx function in order to
|
|
reduce duplicate codes.
|
|
|
|
Fixes: 23d4b61fee5d ("net/hns3: support multiple process")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_ethdev.c | 20 ++++----------------
|
|
drivers/net/hns3/hns3_ethdev_vf.c | 19 ++++---------------
|
|
drivers/net/hns3/hns3_mp.c | 4 ++--
|
|
drivers/net/hns3/hns3_rxtx.c | 28 ++++++++++++++++++++++++++++
|
|
drivers/net/hns3/hns3_rxtx.h | 2 ++
|
|
5 files changed, 40 insertions(+), 33 deletions(-)
|
|
|
|
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
|
index 8fa12d91bb..1c67ff2c99 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev.c
|
|
@@ -5052,8 +5052,7 @@ hns3_dev_start(struct rte_eth_dev *dev)
|
|
rte_spinlock_unlock(&hw->lock);
|
|
|
|
hns3_rx_scattered_calc(dev);
|
|
- hns3_set_rxtx_function(dev);
|
|
- hns3_mp_req_start_rxtx(dev);
|
|
+ hns3_start_rxtx_datapath(dev);
|
|
|
|
/* Enable interrupt of all rx queues before enabling queues */
|
|
hns3_dev_all_rx_queue_intr_enable(hw, true);
|
|
@@ -5131,12 +5130,7 @@ hns3_dev_stop(struct rte_eth_dev *dev)
|
|
dev->data->dev_started = 0;
|
|
|
|
hw->adapter_state = HNS3_NIC_STOPPING;
|
|
- hns3_set_rxtx_function(dev);
|
|
- rte_wmb();
|
|
- /* Disable datapath on secondary process. */
|
|
- hns3_mp_req_stop_rxtx(dev);
|
|
- /* Prevent crashes when queues are still in use. */
|
|
- rte_delay_ms(hw->cfg_max_queues);
|
|
+ hns3_stop_rxtx_datapath(dev);
|
|
|
|
rte_spinlock_lock(&hw->lock);
|
|
if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED) == 0) {
|
|
@@ -5752,12 +5746,7 @@ hns3_stop_service(struct hns3_adapter *hns)
|
|
rte_eal_alarm_cancel(hns3_service_handler, eth_dev);
|
|
hns3_update_linkstatus_and_event(hw, false);
|
|
}
|
|
-
|
|
- hns3_set_rxtx_function(eth_dev);
|
|
- rte_wmb();
|
|
- /* Disable datapath on secondary process. */
|
|
- hns3_mp_req_stop_rxtx(eth_dev);
|
|
- rte_delay_ms(hw->cfg_max_queues);
|
|
+ hns3_stop_rxtx_datapath(eth_dev);
|
|
|
|
rte_spinlock_lock(&hw->lock);
|
|
if (hns->hw.adapter_state == HNS3_NIC_STARTED ||
|
|
@@ -5790,8 +5779,7 @@ hns3_start_service(struct hns3_adapter *hns)
|
|
hw->reset.level == HNS3_GLOBAL_RESET)
|
|
hns3_set_rst_done(hw);
|
|
eth_dev = &rte_eth_devices[hw->data->port_id];
|
|
- hns3_set_rxtx_function(eth_dev);
|
|
- hns3_mp_req_start_rxtx(eth_dev);
|
|
+ hns3_start_rxtx_datapath(eth_dev);
|
|
if (hw->adapter_state == HNS3_NIC_STARTED) {
|
|
/*
|
|
* This API parent function already hold the hns3_hw.lock, the
|
|
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
|
|
index a3a1b71a63..3a93987409 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev_vf.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
|
|
@@ -1572,12 +1572,7 @@ hns3vf_dev_stop(struct rte_eth_dev *dev)
|
|
dev->data->dev_started = 0;
|
|
|
|
hw->adapter_state = HNS3_NIC_STOPPING;
|
|
- hns3_set_rxtx_function(dev);
|
|
- rte_wmb();
|
|
- /* Disable datapath on secondary process. */
|
|
- hns3_mp_req_stop_rxtx(dev);
|
|
- /* Prevent crashes when queues are still in use. */
|
|
- rte_delay_ms(hw->cfg_max_queues);
|
|
+ hns3_stop_rxtx_datapath(dev);
|
|
|
|
rte_spinlock_lock(&hw->lock);
|
|
if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED) == 0) {
|
|
@@ -1731,8 +1726,7 @@ hns3vf_dev_start(struct rte_eth_dev *dev)
|
|
rte_spinlock_unlock(&hw->lock);
|
|
|
|
hns3_rx_scattered_calc(dev);
|
|
- hns3_set_rxtx_function(dev);
|
|
- hns3_mp_req_start_rxtx(dev);
|
|
+ hns3_start_rxtx_datapath(dev);
|
|
|
|
/* Enable interrupt of all rx queues before enabling queues */
|
|
hns3_dev_all_rx_queue_intr_enable(hw, true);
|
|
@@ -1902,11 +1896,7 @@ hns3vf_stop_service(struct hns3_adapter *hns)
|
|
}
|
|
hw->mac.link_status = RTE_ETH_LINK_DOWN;
|
|
|
|
- hns3_set_rxtx_function(eth_dev);
|
|
- rte_wmb();
|
|
- /* Disable datapath on secondary process. */
|
|
- hns3_mp_req_stop_rxtx(eth_dev);
|
|
- rte_delay_ms(hw->cfg_max_queues);
|
|
+ hns3_stop_rxtx_datapath(eth_dev);
|
|
|
|
rte_spinlock_lock(&hw->lock);
|
|
if (hw->adapter_state == HNS3_NIC_STARTED ||
|
|
@@ -1938,8 +1928,7 @@ hns3vf_start_service(struct hns3_adapter *hns)
|
|
struct rte_eth_dev *eth_dev;
|
|
|
|
eth_dev = &rte_eth_devices[hw->data->port_id];
|
|
- hns3_set_rxtx_function(eth_dev);
|
|
- hns3_mp_req_start_rxtx(eth_dev);
|
|
+ hns3_start_rxtx_datapath(eth_dev);
|
|
|
|
rte_eal_alarm_set(HNS3VF_KEEP_ALIVE_INTERVAL, hns3vf_keep_alive_handler,
|
|
eth_dev);
|
|
diff --git a/drivers/net/hns3/hns3_mp.c b/drivers/net/hns3/hns3_mp.c
|
|
index e74ddea195..c3005b943f 100644
|
|
--- a/drivers/net/hns3/hns3_mp.c
|
|
+++ b/drivers/net/hns3/hns3_mp.c
|
|
@@ -87,12 +87,12 @@ mp_secondary_handle(const struct rte_mp_msg *mp_msg, const void *peer)
|
|
case HNS3_MP_REQ_START_RXTX:
|
|
PMD_INIT_LOG(INFO, "port %u starting datapath",
|
|
dev->data->port_id);
|
|
- hns3_set_rxtx_function(dev);
|
|
+ hns3_start_rxtx_datapath(dev);
|
|
break;
|
|
case HNS3_MP_REQ_STOP_RXTX:
|
|
PMD_INIT_LOG(INFO, "port %u stopping datapath",
|
|
dev->data->port_id);
|
|
- hns3_set_rxtx_function(dev);
|
|
+ hns3_stop_rxtx_datapath(dev);
|
|
break;
|
|
case HNS3_MP_REQ_START_TX:
|
|
PMD_INIT_LOG(INFO, "port %u starting Tx datapath",
|
|
diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c
|
|
index b5e7ba7325..1f44c0345f 100644
|
|
--- a/drivers/net/hns3/hns3_rxtx.c
|
|
+++ b/drivers/net/hns3/hns3_rxtx.c
|
|
@@ -4765,3 +4765,31 @@ hns3_start_tx_datapath(struct rte_eth_dev *dev)
|
|
|
|
hns3_mp_req_start_tx(dev);
|
|
}
|
|
+
|
|
+void
|
|
+hns3_stop_rxtx_datapath(struct rte_eth_dev *dev)
|
|
+{
|
|
+ struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
|
+
|
|
+ hns3_set_rxtx_function(dev);
|
|
+
|
|
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY)
|
|
+ return;
|
|
+
|
|
+ rte_wmb();
|
|
+ /* Disable datapath on secondary process. */
|
|
+ hns3_mp_req_stop_rxtx(dev);
|
|
+ /* Prevent crashes when queues are still in use. */
|
|
+ rte_delay_ms(hw->cfg_max_queues);
|
|
+}
|
|
+
|
|
+void
|
|
+hns3_start_rxtx_datapath(struct rte_eth_dev *dev)
|
|
+{
|
|
+ hns3_set_rxtx_function(dev);
|
|
+
|
|
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY)
|
|
+ return;
|
|
+
|
|
+ hns3_mp_req_start_rxtx(dev);
|
|
+}
|
|
diff --git a/drivers/net/hns3/hns3_rxtx.h b/drivers/net/hns3/hns3_rxtx.h
|
|
index 1bdc124b7b..fa39f6481a 100644
|
|
--- a/drivers/net/hns3/hns3_rxtx.h
|
|
+++ b/drivers/net/hns3/hns3_rxtx.h
|
|
@@ -773,5 +773,7 @@ int hns3_dev_tx_descriptor_status(void *tx_queue, uint16_t offset);
|
|
void hns3_tx_push_init(struct rte_eth_dev *dev);
|
|
void hns3_stop_tx_datapath(struct rte_eth_dev *dev);
|
|
void hns3_start_tx_datapath(struct rte_eth_dev *dev);
|
|
+void hns3_stop_rxtx_datapath(struct rte_eth_dev *dev);
|
|
+void hns3_start_rxtx_datapath(struct rte_eth_dev *dev);
|
|
|
|
#endif /* HNS3_RXTX_H */
|
|
--
|
|
2.23.0
|
|
|