From: Kishore Padmanabha <[email protected]> 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 <[email protected]> Reviewed-by: Farah Smith <[email protected]> --- 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)

