187 lines
5.8 KiB
Diff
187 lines
5.8 KiB
Diff
From 1a1de9879f58b4fd202ecd481c56ae9777207fe9 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Thu, 5 May 2022 20:27:01 +0800
|
|
Subject: [PATCH] net/hns3: fix order of clearing imissed register in PF
|
|
|
|
Clearing imissed registers in PF hardware depends on the
|
|
'drop_stats_mode' in struct hns3_hw. The variable is initialized after
|
|
the "hns3_get_configuration". But, in current code, the clearing
|
|
operation runs before the function.
|
|
So this patch fixes this order. In addition, this patch extracts a
|
|
public function to initialize and uninitialize statistics to improve the
|
|
maintainability of these codes.
|
|
|
|
Fixes: 3e9f3042d7c8 ("net/hns3: add imissed packet stats")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
|
|
---
|
|
drivers/net/hns3/hns3_ethdev.c | 13 +++----------
|
|
drivers/net/hns3/hns3_ethdev_vf.c | 13 +++----------
|
|
drivers/net/hns3/hns3_stats.c | 27 ++++++++++++++++++++++++---
|
|
drivers/net/hns3/hns3_stats.h | 5 ++---
|
|
4 files changed, 32 insertions(+), 26 deletions(-)
|
|
|
|
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
|
|
index 4e089e682f..5aed7046d8 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev.c
|
|
@@ -4622,13 +4622,6 @@ hns3_init_pf(struct rte_eth_dev *eth_dev)
|
|
goto err_cmd_init;
|
|
}
|
|
|
|
- /* Hardware statistics of imissed registers cleared. */
|
|
- ret = hns3_update_imissed_stats(hw, true);
|
|
- if (ret) {
|
|
- hns3_err(hw, "clear imissed stats failed, ret = %d", ret);
|
|
- goto err_cmd_init;
|
|
- }
|
|
-
|
|
hns3_config_all_msix_error(hw, true);
|
|
|
|
ret = rte_intr_callback_register(pci_dev->intr_handle,
|
|
@@ -4654,7 +4647,7 @@ hns3_init_pf(struct rte_eth_dev *eth_dev)
|
|
goto err_get_config;
|
|
}
|
|
|
|
- ret = hns3_tqp_stats_init(hw);
|
|
+ ret = hns3_stats_init(hw);
|
|
if (ret)
|
|
goto err_get_config;
|
|
|
|
@@ -4700,7 +4693,7 @@ hns3_init_pf(struct rte_eth_dev *eth_dev)
|
|
err_fdir:
|
|
hns3_uninit_umv_space(hw);
|
|
err_init_hw:
|
|
- hns3_tqp_stats_uninit(hw);
|
|
+ hns3_stats_uninit(hw);
|
|
err_get_config:
|
|
hns3_pf_disable_irq0(hw);
|
|
rte_intr_disable(pci_dev->intr_handle);
|
|
@@ -4734,7 +4727,7 @@ hns3_uninit_pf(struct rte_eth_dev *eth_dev)
|
|
hns3_flow_uninit(eth_dev);
|
|
hns3_fdir_filter_uninit(hns);
|
|
hns3_uninit_umv_space(hw);
|
|
- hns3_tqp_stats_uninit(hw);
|
|
+ hns3_stats_uninit(hw);
|
|
hns3_config_mac_tnl_int(hw, false);
|
|
hns3_pf_disable_irq0(hw);
|
|
rte_intr_disable(pci_dev->intr_handle);
|
|
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
|
|
index 9091706fe5..9e9fdc4144 100644
|
|
--- a/drivers/net/hns3/hns3_ethdev_vf.c
|
|
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
|
|
@@ -1510,17 +1510,10 @@ hns3vf_init_vf(struct rte_eth_dev *eth_dev)
|
|
goto err_get_config;
|
|
}
|
|
|
|
- ret = hns3_tqp_stats_init(hw);
|
|
+ ret = hns3_stats_init(hw);
|
|
if (ret)
|
|
goto err_get_config;
|
|
|
|
- /* Hardware statistics of imissed registers cleared. */
|
|
- ret = hns3_update_imissed_stats(hw, true);
|
|
- if (ret) {
|
|
- hns3_err(hw, "clear imissed stats failed, ret = %d", ret);
|
|
- goto err_set_tc_queue;
|
|
- }
|
|
-
|
|
ret = hns3_queue_to_tc_mapping(hw, hw->tqps_num, hw->tqps_num);
|
|
if (ret) {
|
|
PMD_INIT_LOG(ERR, "failed to set tc info, ret = %d.", ret);
|
|
@@ -1548,7 +1541,7 @@ hns3vf_init_vf(struct rte_eth_dev *eth_dev)
|
|
return 0;
|
|
|
|
err_set_tc_queue:
|
|
- hns3_tqp_stats_uninit(hw);
|
|
+ hns3_stats_uninit(hw);
|
|
|
|
err_get_config:
|
|
hns3vf_disable_irq0(hw);
|
|
@@ -1579,7 +1572,7 @@ hns3vf_uninit_vf(struct rte_eth_dev *eth_dev)
|
|
(void)hns3vf_set_alive(hw, false);
|
|
(void)hns3vf_set_promisc_mode(hw, false, false, false);
|
|
hns3_flow_uninit(eth_dev);
|
|
- hns3_tqp_stats_uninit(hw);
|
|
+ hns3_stats_uninit(hw);
|
|
hns3vf_disable_irq0(hw);
|
|
rte_intr_disable(pci_dev->intr_handle);
|
|
hns3_intr_unregister(pci_dev->intr_handle, hns3vf_interrupt_handler,
|
|
diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c
|
|
index 806720faff..e4a5dcf2f8 100644
|
|
--- a/drivers/net/hns3/hns3_stats.c
|
|
+++ b/drivers/net/hns3/hns3_stats.c
|
|
@@ -540,7 +540,7 @@ hns3_update_port_tx_ssu_drop_stats(struct hns3_hw *hw)
|
|
return 0;
|
|
}
|
|
|
|
-int
|
|
+static int
|
|
hns3_update_imissed_stats(struct hns3_hw *hw, bool is_clear)
|
|
{
|
|
struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw);
|
|
@@ -1476,7 +1476,7 @@ hns3_dev_xstats_reset(struct rte_eth_dev *dev)
|
|
return 0;
|
|
}
|
|
|
|
-int
|
|
+static int
|
|
hns3_tqp_stats_init(struct hns3_hw *hw)
|
|
{
|
|
struct hns3_tqp_stats *tqp_stats = &hw->tqp_stats;
|
|
@@ -1500,7 +1500,7 @@ hns3_tqp_stats_init(struct hns3_hw *hw)
|
|
return 0;
|
|
}
|
|
|
|
-void
|
|
+static void
|
|
hns3_tqp_stats_uninit(struct hns3_hw *hw)
|
|
{
|
|
struct hns3_tqp_stats *tqp_stats = &hw->tqp_stats;
|
|
@@ -1521,3 +1521,24 @@ hns3_tqp_stats_clear(struct hns3_hw *hw)
|
|
memset(stats->rcb_rx_ring_pktnum, 0, sizeof(uint64_t) * hw->tqps_num);
|
|
memset(stats->rcb_tx_ring_pktnum, 0, sizeof(uint64_t) * hw->tqps_num);
|
|
}
|
|
+
|
|
+int
|
|
+hns3_stats_init(struct hns3_hw *hw)
|
|
+{
|
|
+ int ret;
|
|
+
|
|
+ /* Hardware statistics of imissed registers cleared. */
|
|
+ ret = hns3_update_imissed_stats(hw, true);
|
|
+ if (ret) {
|
|
+ hns3_err(hw, "clear imissed stats failed, ret = %d", ret);
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ return hns3_tqp_stats_init(hw);
|
|
+}
|
|
+
|
|
+void
|
|
+hns3_stats_uninit(struct hns3_hw *hw)
|
|
+{
|
|
+ hns3_tqp_stats_uninit(hw);
|
|
+}
|
|
diff --git a/drivers/net/hns3/hns3_stats.h b/drivers/net/hns3/hns3_stats.h
|
|
index c81d351082..e89dc97632 100644
|
|
--- a/drivers/net/hns3/hns3_stats.h
|
|
+++ b/drivers/net/hns3/hns3_stats.h
|
|
@@ -161,9 +161,8 @@ int hns3_dev_xstats_get_names_by_id(struct rte_eth_dev *dev,
|
|
struct rte_eth_xstat_name *xstats_names,
|
|
uint32_t size);
|
|
int hns3_stats_reset(struct rte_eth_dev *dev);
|
|
-int hns3_tqp_stats_init(struct hns3_hw *hw);
|
|
-void hns3_tqp_stats_uninit(struct hns3_hw *hw);
|
|
-int hns3_update_imissed_stats(struct hns3_hw *hw, bool is_clear);
|
|
+int hns3_stats_init(struct hns3_hw *hw);
|
|
+void hns3_stats_uninit(struct hns3_hw *hw);
|
|
int hns3_query_mac_stats_reg_num(struct hns3_hw *hw);
|
|
|
|
#endif /* _HNS3_STATS_H_ */
|
|
--
|
|
2.33.0
|
|
|