RE: [PATCH] octeontx2-pf: Add error handling for cn10k_map_unmap_rq_policer().
From: Subbaraya Sundeep Bhatta
Date: Fri Apr 04 2025 - 01:27:26 EST
Hi,
From: Wentao Liang <vulab@xxxxxxxxxxx>
Sent: Thursday, April 3, 2025 8:43 PM
To: Sunil Kovvuri Goutham <sgoutham@xxxxxxxxxxx>; Geethasowjanya Akula <gakula@xxxxxxxxxxx>; Subbaraya Sundeep Bhatta <sbhatta@xxxxxxxxxxx>; Hariprasad Kelam <hkelam@xxxxxxxxxxx>; andrew+netdev@xxxxxxx; davem@xxxxxxxxxxxxx; edumazet@xxxxxxxxxx; kuba@xxxxxxxxxx; pabeni@xxxxxxxxxx
Cc: netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Wentao Liang <vulab@xxxxxxxxxxx>
Subject: [PATCH] octeontx2-pf: Add error handling for cn10k_map_unmap_rq_policer().
The cn10k_free_matchall_ipolicer() calls the cn10k_map_unmap_rq_policer()
for each queue in a for loop without checking for any errors. A proper
implementation can be found in cn10k_set_matchall_ipolicer_rate().
Check the return value of the cn10k_map_unmap_rq_policer() function during
each loop. Jump to unlock function and return the error code if the
funciton fails to unmap policer.
Fixes: 2ca89a2c3752 ("octeontx2-pf: TC_MATCHALL ingress ratelimiting offload")
Signed-off-by: Wentao Liang <mailto:vulab@xxxxxxxxxxx>
---
drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c
index a15cc86635d6..ce58ad61198e 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c
@@ -353,11 +353,13 @@ int cn10k_free_matchall_ipolicer(struct otx2_nic *pfvf)
/* Remove RQ's policer mapping */
for (qidx = 0; qidx < hw->rx_queues; qidx++)
- cn10k_map_unmap_rq_policer(pfvf, qidx,
- hw->matchall_ipolicer, false);
+ rc = cn10k_map_unmap_rq_policer(pfvf, qidx, hw->matchall_ipolicer, false);
+ if (rc)
+ goto out;
Intentionally we do not bail out when unmapping one of the queues is failed. The reason is during teardown if one of the queues is failed then
we end up not tearing down rest of the queues and those queues cannot be used later which is bad. So leave whatever queues have failed and proceed
with tearing down the rest. Hence all we can do is print an error for the failed queue and continue.
Thanks,
Sundeep
rc = cn10k_free_leaf_profile(pfvf, hw->matchall_ipolicer);
+out:
mutex_unlock(&pfvf->mbox.lock);
return rc;
}
--
2.42.0.windows.2