Skip to contentSkip to conversation

common/cnxk: fix missing RTE Flow counter deletion

PATCH In review [email protected] 2 participants 2 messages Jan 25, 2022 – Feb 17, 2022

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 common/cnxk: fix missing RTE Flow counter deletion

From: Satheesh Paul <[email protected]>

Added code to clear and delete counters upon flow deletion.

Fixes a07f7ced43 ("common/cnxk: add NPC init and fini")
---
 drivers/common/cnxk/roc_npc.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/common/cnxk/roc_npc.c +10 -0
index e3961bfbc6..df3016f538 100644
@@ -1259,6 +1259,16 @@ roc_npc_flow_destroy(struct roc_npc *roc_npc, struct roc_npc_flow *flow)
 			return rc;
 	}
 
+	if (flow->ctr_id != NPC_COUNTER_NONE) {
+		rc = roc_npc_mcam_clear_counter(roc_npc, flow->ctr_id);
+		if (rc != 0)
+			return rc;
+
+		rc = npc_mcam_free_counter(npc, flow->ctr_id);
+		if (rc != 0)
+			return rc;
+	}
+
 	rc = npc_mcam_free_entry(npc, flow->mcam_id);
 	if (rc != 0)
 		return rc;
Signature · 1 line
2.25.4
Reviewed-by on v1 1/1
#1 lore raw
Quoted 10 lines · On Tue, Jan 25, 2022 at 9:45 AM <[email protected]> wrote:

From: Satheesh Paul <[email protected]>

Added code to clear and delete counters upon flow deletion.

Fixes a07f7ced43 ("common/cnxk: add NPC init and fini")

Updated the comment as follows and applied to
dpdk-next-net-mrvl/for-next-net. Thanks

common/cnxk: fix flow deletion

When a flow is deleted, the counters are deleted without being cleared first. This results in counter values being retained and shown in flows created later. Hence, counter is cleared before being deleted.

Updated driver to clear and delete counters upon flow deletion.

Fixes a07f7ced43 ("common/cnxk: add NPC init and fini")
Quoted 28 lines
---
 drivers/common/cnxk/roc_npc.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/common/cnxk/roc_npc.c +10 -1
index e3961bfbc6..df3016f538 100644
@@ -1259,6 +1259,16 @@ roc_npc_flow_destroy(struct roc_npc *roc_npc, struct roc_npc_flow *flow)
                        return rc;
        }
 
+       if (flow->ctr_id != NPC_COUNTER_NONE) {
+               rc = roc_npc_mcam_clear_counter(roc_npc, flow->ctr_id);
+               if (rc != 0)
+                       return rc;
+
+               rc = npc_mcam_free_counter(npc, flow->ctr_id);
+               if (rc != 0)
+                       return rc;
+       }
+
        rc = npc_mcam_free_entry(npc, flow->mcam_id);
        if (rc != 0)
                return rc;
--

2.25.4