net/mlx5: fix indexed pool resize
PATCH 1/1 net/mlx5: fix indexed pool resize
On success, indexed pool resize sets maximal pool entries number to the num_entries parameter value.
The patch fixes maximal pool entries assignment.
The patch also adds error parameter to log error types.
--- drivers/net/mlx5/mlx5_flow_hw.c | 6 ++--- drivers/net/mlx5/mlx5_utils.c | 39 ++++++++++++++------------------- drivers/net/mlx5/mlx5_utils.h | 3 ++- 3 files changed, 21 insertions(+), 27 deletions(-)
drivers/net/mlx5/mlx5_flow_hw.c +2 -4
@@ -14747,11 +14747,9 @@ flow_hw_table_resize(struct rte_eth_dev *dev,return rte_flow_error_set (error,EINVAL ,RTE_FLOW_ERROR_TYPE_UNSPECIFIED , table,"shrinking table is not supported" ); - ret =mlx5_ipool_resize (table->flow, nb_flows); + ret =mlx5_ipool_resize (table->flow, nb_flows, error);if (ret) -return rte_flow_error_set (error,EINVAL , -RTE_FLOW_ERROR_TYPE_UNSPECIFIED , - table,"cannot resize flows pool" ); +return ret;/* * A resizable matcher doesn't support rule update. In this case, the ipool * for the resource is not created and there is no need to resize it.
drivers/net/mlx5/mlx5_utils.c +17 -22
@@ -811,30 +811,25 @@ mlx5_ipool_get_next(struct mlx5_indexed_pool *pool, uint32_t *pos) }int -mlx5_ipool_resize (struct mlx5_indexed_pool *pool,uint32_t num_entries) +mlx5_ipool_resize (struct mlx5_indexed_pool *pool,uint32_t num_entries, +struct rte_flow_error *error) { -uint32_t cur_max_idx; -uint32_t max_index =mlx5_trunk_idx_offset_get (pool,TRUNK_MAX_IDX +1 ); - -if (num_entries % pool->cfg.trunk_size) { -DRV_LOG (ERR ,"num_entries param should be trunk_size(=%u) multiplication\n" , - pool->cfg.trunk_size); -return -EINVAL ; - } - +if (num_entries == pool->cfg.max_idx) +return 0 ; +else if (num_entries < pool->cfg.max_idx) +return rte_flow_error_set (error,EINVAL , +RTE_FLOW_ERROR_TYPE_UNSPECIFIED , +NULL ,"cannot decrease pool size" ); +if (num_entries % pool->cfg.trunk_size) +return rte_flow_error_set (error,EINVAL , +RTE_FLOW_ERROR_TYPE_UNSPECIFIED , +NULL ,"number of entries in pool must be trunk size multiplication" ); +if (num_entries >=mlx5_trunk_idx_offset_get (pool,TRUNK_MAX_IDX +1 )) +return rte_flow_error_set (error,EINVAL , +RTE_FLOW_ERROR_TYPE_UNSPECIFIED , +NULL ,"requested number of entries exceeds pool limit" );mlx5_ipool_lock (pool); - cur_max_idx = pool->cfg.max_idx + num_entries; -/* If the ipool max idx is above maximum or uint overflow occurred. */ -if (cur_max_idx > max_index || cur_max_idx < num_entries) { -DRV_LOG (ERR ,"Ipool resize failed\n" ); -DRV_LOG (ERR ,"Adding %u entries to existing %u entries, will cross max limit(=%u)\n" , - num_entries, cur_max_idx, max_index); -mlx5_ipool_unlock (pool); -return -EINVAL ; - } - -/* Update maximum entries number. */ - pool->cfg.max_idx = cur_max_idx; + pool->cfg.max_idx = num_entries;mlx5_ipool_unlock (pool);return 0 ; }
drivers/net/mlx5/mlx5_utils.h +2 -1
@@ -438,7 +438,8 @@ void *mlx5_ipool_get_next(struct mlx5_indexed_pool *pool, uint32_t *pos);* - 0 on success. * */ -int mlx5_ipool_resize (struct mlx5_indexed_pool *pool,uint32_t num_entries); +int mlx5_ipool_resize (struct mlx5_indexed_pool *pool,uint32_t num_entries, +struct rte_flow_error *error);/** * This function allocates new empty Three-level table.
Signature · 1 line
2.43.0
Hi,
From: Gregory Etelson <[email protected]>
Sent: Sunday, July 7, 2024 12:48 PM
To: [email protected]
Cc: Gregory Etelson; Maayan Kashani; Raslan Darawsheh; Dariusz Sosnowski; Slava Ovsiienko; Bing Zhao; Ori Kam; Suanming Mou; Matan Azrad
Subject: [PATCH] net/mlx5: fix indexed pool resize
On success, indexed pool resize sets maximal pool entries number to the num_entries parameter value.
The patch fixes maximal pool entries assignment.
The patch also adds error parameter to log error types.
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh