From: Dongdong Liu <liudongdong3@huawei.com>
To: <dev@dpdk.org>, <ferruh.yigit@amd.com>, <thomas@monjalon.net>,
<andrew.rybchenko@oktetlabs.ru>
Cc: <stable@dpdk.org>, <yisen.zhuang@huawei.com>,
<liudongdong3@huawei.com>, <lihuisong@huawei.com>
Subject: [PATCH 6/6] net/hns3: extract common functions to set Rx/Tx
Date: Sat, 11 Feb 2023 17:18:30 +0800 [thread overview]
Message-ID: <20230211091830.3494-7-liudongdong3@huawei.com> (raw)
In-Reply-To: <20230211091830.3494-1-liudongdong3@huawei.com>
From: Huisong Li <lihuisong@huawei.com>
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 ab565ce128..6babf67fce 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 d3c1bdf2c5..d051a1357b 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 7184f9ad58..556f1941c6 100644
--- a/drivers/net/hns3/hns3_mp.c
+++ b/drivers/net/hns3/hns3_mp.c
@@ -89,12 +89,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 def22bcd30..4065c519c3 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.22.0
next prev parent reply other threads:[~2023-02-11 9:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-11 9:18 [PATCH 0/6] net/hns3: some code optimization for Rx/Tx function Dongdong Liu
2023-02-11 9:18 ` [PATCH 1/6] net/hns3: fix querying dummy function failed Dongdong Liu
2023-02-11 9:18 ` [PATCH 2/6] net/hns3: add debug info for Rx/Tx dummy function Dongdong Liu
2023-02-11 9:18 ` [PATCH 3/6] net/hns3: remove debug condition for Tx prepare Dongdong Liu
2023-02-11 9:18 ` [PATCH 4/6] net/hns3: separate tx prepare from getting Tx function Dongdong Liu
2023-02-11 9:18 ` [PATCH 5/6] net/hns3: remove getting Tx function from head file Dongdong Liu
2023-02-11 9:18 ` Dongdong Liu [this message]
2023-02-14 11:54 ` [PATCH 0/6] net/hns3: some code optimization for Rx/Tx function Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230211091830.3494-7-liudongdong3@huawei.com \
--to=liudongdong3@huawei.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=lihuisong@huawei.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
--cc=yisen.zhuang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).