net/hns3: fix order of clearing imissed register in PF
authorHuisong Li <lihuisong@huawei.com>
Thu, 5 May 2022 12:27:01 +0000 (20:27 +0800)
committerFerruh Yigit <ferruh.yigit@xilinx.com>
Thu, 12 May 2022 08:28:54 +0000 (10:28 +0200)
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
drivers/net/hns3/hns3_ethdev_vf.c
drivers/net/hns3/hns3_stats.c
drivers/net/hns3/hns3_stats.h

index 4e089e6..5aed704 100644 (file)
@@ -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 @@ err_enable_intr:
 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);
index 9091706..9e9fdc4 100644 (file)
@@ -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,
index 806720f..e4a5dcf 100644 (file)
@@ -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);
+}
index c81d351..e89dc97 100644 (file)
@@ -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_ */