On 4/6/2022 10:22 AM, Min Hu (Connor) wrote:
From: Huisong Li <lihuis...@huawei.com>

The MAC and queues statistics aren't 64-bit registers in hardware. If
hardware statistics are not obtained for a long time, these statistics will
be reversed.

I think using 'overflow' instead of 'reversed' is more clear.

As far as I can see from code, these are 32 bit values, can be good to mention in the commit log.

So PF and VF driver have to periodically obtain and save these
statistics. Since the periodical task and the stats API are in different
threads, we introduce a statistics lock to protect the statistics.

Fixes: 8839c5e202f3 ("net/hns3: support device stats")
Cc: sta...@dpdk.org

Signed-off-by: Huisong Li <lihuis...@huawei.com>
Signed-off-by: Min Hu (Connor) <humi...@huawei.com>

<...>

@@ -604,16 +626,15 @@ hns3_stats_get(struct rte_eth_dev *eth_dev, struct 
rte_eth_stats *rte_stats)
        struct hns3_tqp_stats *stats = &hw->tqp_stats;
        struct hns3_rx_queue *rxq;
        struct hns3_tx_queue *txq;
-       uint64_t cnt;
        uint16_t i;
        int ret;
+ rte_spinlock_lock(&hw->stats_lock);

The lock covers most of the 'stats_get()' function, but only Rx/Tx queue stats needs to be protected, you may consider reducing the scope of the lock. Same for below functions.

<...>

@@ -1453,6 +1464,7 @@ int
  hns3_dev_xstats_reset(struct rte_eth_dev *dev)
  {
        struct hns3_adapter *hns = dev->data->dev_private;
+       struct hns3_hw *hw = &hns->hw;
        int ret;
/* Clear tqp stats */
@@ -1460,20 +1472,22 @@ hns3_dev_xstats_reset(struct rte_eth_dev *dev)
        if (ret)
                return ret;
+ rte_spinlock_unlock(&hw->stats_lock);

I guess this should be 'rte_spinlock_lock()'

Reply via email to