* [PATCH] net/mlx5: fix indexed pool resize
@ 2024-07-07 9:48 Gregory Etelson
2024-07-18 7:23 ` Raslan Darawsheh
0 siblings, 1 reply; 2+ messages in thread
From: Gregory Etelson @ 2024-07-07 9:48 UTC (permalink / raw)
To: dev
Cc: getelson, mkashani, rasland, Dariusz Sosnowski,
Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
Matan Azrad
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.
Fixes: 89578504edd9 ("net/mlx5: add ipool resize function")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
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(-)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index ad8d73a089..45dab32f80 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -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.
diff --git a/drivers/net/mlx5/mlx5_utils.c b/drivers/net/mlx5/mlx5_utils.c
index d52119f0be..d882af6047 100644
--- a/drivers/net/mlx5/mlx5_utils.c
+++ b/drivers/net/mlx5/mlx5_utils.c
@@ -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;
}
diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h
index c44a9d88be..f933daf03c 100644
--- a/drivers/net/mlx5/mlx5_utils.h
+++ b/drivers/net/mlx5/mlx5_utils.h
@@ -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.
--
2.43.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] net/mlx5: fix indexed pool resize
2024-07-07 9:48 [PATCH] net/mlx5: fix indexed pool resize Gregory Etelson
@ 2024-07-18 7:23 ` Raslan Darawsheh
0 siblings, 0 replies; 2+ messages in thread
From: Raslan Darawsheh @ 2024-07-18 7:23 UTC (permalink / raw)
To: Gregory Etelson, dev
Cc: Maayan Kashani, Dariusz Sosnowski, Slava Ovsiienko, Bing Zhao,
Ori Kam, Suanming Mou, Matan Azrad
Hi,
From: Gregory Etelson <getelson@nvidia.com>
Sent: Sunday, July 7, 2024 12:48 PM
To: dev@dpdk.org
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.
Fixes: 89578504edd9 ("net/mlx5: add ipool resize function")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-07-18 7:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-07 9:48 [PATCH] net/mlx5: fix indexed pool resize Gregory Etelson
2024-07-18 7:23 ` Raslan Darawsheh
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).