net/hns3: fix flow counter value
[dpdk.git] / drivers / net / hns3 / hns3_flow.c
index 711eed3..098b191 100644 (file)
@@ -158,7 +158,10 @@ hns3_counter_new(struct rte_eth_dev *dev, uint32_t shared, uint32_t id,
 {
        struct hns3_adapter *hns = dev->data->dev_private;
        struct hns3_pf *pf = &hns->pf;
+       struct hns3_hw *hw = &hns->hw;
        struct hns3_flow_counter *cnt;
+       uint64_t value;
+       int ret;
 
        cnt = hns3_counter_lookup(dev, id);
        if (cnt) {
@@ -171,6 +174,13 @@ hns3_counter_new(struct rte_eth_dev *dev, uint32_t shared, uint32_t id,
                return 0;
        }
 
+       /* Clear the counter by read ops because the counter is read-clear */
+       ret = hns3_get_count(hw, id, &value);
+       if (ret)
+               return rte_flow_error_set(error, EIO,
+                                         RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
+                                         "Clear counter failed!");
+
        cnt = rte_zmalloc("hns3 counter", sizeof(*cnt), 0);
        if (cnt == NULL)
                return rte_flow_error_set(error, ENOMEM,