[PATCH 10/54] net/bnxt/tf_core: fix table scope free
Manish Kurup
manish.kurup at broadcom.com
Tue Sep 30 02:35:20 CEST 2025
From: Kishore Padmanabha <kishore.padmanabha at broadcom.com>
Removed the additional call to free the table scope memory. Also
fixed the scope size check which should be power of 2.
Signed-off-by: Kishore Padmanabha <kishore.padmanabha at broadcom.com>
Reviewed-by: Farah Smith <farah.smith at broadcom.com>
---
drivers/net/bnxt/tf_core/v3/tfc_tbl_scope.c | 13 ++++---------
drivers/net/bnxt/tf_core/v3/tfc_util.c | 6 ++++++
drivers/net/bnxt/tf_core/v3/tfc_util.h | 3 +++
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_tbl_scope.c b/drivers/net/bnxt/tf_core/v3/tfc_tbl_scope.c
index b01bf8d42a..60b8289805 100644
--- a/drivers/net/bnxt/tf_core/v3/tfc_tbl_scope.c
+++ b/drivers/net/bnxt/tf_core/v3/tfc_tbl_scope.c
@@ -926,8 +926,7 @@ int tfc_tbl_scope_size_query(struct tfc *tfcp,
return -EINVAL;
}
- if (parms->max_pools != 1 && parms->max_pools !=
- (uint32_t)(1 << next_pow2(parms->max_pools))) {
+ if (is_pow2(parms->max_pools)) {
PMD_DRV_LOG(ERR, "%s: Invalid max_pools %u not pow2\n",
__func__, parms->max_pools);
return -EINVAL;
@@ -1044,8 +1043,7 @@ int tfc_tbl_scope_mem_alloc(struct tfc *tfcp, uint16_t fid, uint8_t tsid,
return -EINVAL;
}
- if (parms->max_pools != 1 && parms->max_pools !=
- (1 << next_pow2(parms->max_pools))) {
+ if (is_pow2(parms->max_pools)) {
PMD_DRV_LOG(ERR, "%s: Invalid max_pools %u not pow2\n",
__func__, parms->max_pools);
return -EINVAL;
@@ -1541,11 +1539,8 @@ int tfc_tbl_scope_fid_rem(struct tfc *tfcp, uint16_t fid, uint8_t tsid,
/*
* Check if any table has memory configured and, if so, free it.
*/
- rc = tfo_ts_get_mem_cfg(tfcp->tfo, tsid, CFA_DIR_RX, CFA_REGION_TYPE_LKUP,
- &local, &mem_cfg);
- /* If mem already freed, then local is set to zero (false). */
- if (rc == 0 && local)
- (void)tfc_tbl_scope_mem_free(tfcp, fid, tsid);
+ (void)tfo_ts_get_mem_cfg(tfcp->tfo, tsid, CFA_DIR_RX,
+ CFA_REGION_TYPE_LKUP, &local, &mem_cfg);
rc = tfo_ts_set(tfcp->tfo, tsid, false, CFA_APP_TYPE_INVALID,
false, 0);
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_util.c b/drivers/net/bnxt/tf_core/v3/tfc_util.c
index d3229bd104..91ad3ad657 100644
--- a/drivers/net/bnxt/tf_core/v3/tfc_util.c
+++ b/drivers/net/bnxt/tf_core/v3/tfc_util.c
@@ -220,6 +220,12 @@ uint32_t prev_pow2(uint32_t x)
return x == 1 ? 0 : (BITS_IN_VAR(x) - 1 - __builtin_clz(x - 1));
}
+/* returns 0 if power of 2 */
+int32_t is_pow2(uint32_t x)
+{
+ return (x != 0 && ((x - 1) & x)) ? -1 : 0;
+}
+
uint32_t roundup32(uint32_t x, uint32_t y)
{
return ((x + y - 1) / y) * y;
diff --git a/drivers/net/bnxt/tf_core/v3/tfc_util.h b/drivers/net/bnxt/tf_core/v3/tfc_util.h
index 7d33947d1d..5114517792 100644
--- a/drivers/net/bnxt/tf_core/v3/tfc_util.h
+++ b/drivers/net/bnxt/tf_core/v3/tfc_util.h
@@ -110,6 +110,9 @@ uint32_t tfc_getbits(uint32_t *data, int offset, int blen);
*/
uint32_t next_pow2(uint32_t x);
+/* returns 0 if power of 2 */
+int32_t is_pow2(uint32_t x);
+
/*
* Calculate the largest power of 2 that is less than x. The return value is
* the exponent of 2.
--
2.39.5 (Apple Git-154)
More information about the dev
mailing list