Allowing the replacement of a miss table without enforcing a previous disconnecting. This feature extension allows the user to change the destination miss table when the system runs without losing traffic.
Fixes: b81f95ca770d ("net/mlx5/hws: support default miss table") Cc: sta...@dpdk.org Signed-off-by: Itamar Gozlan <igoz...@nvidia.com> Acked-by: Matan Azrad <ma...@nvidia.com> --- drivers/net/mlx5/hws/mlx5dr_table.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_table.c b/drivers/net/mlx5/hws/mlx5dr_table.c index 55b9b20150..ab73017ade 100644 --- a/drivers/net/mlx5/hws/mlx5dr_table.c +++ b/drivers/net/mlx5/hws/mlx5dr_table.c @@ -611,8 +611,7 @@ static int mlx5dr_table_set_default_miss_not_valid(struct mlx5dr_table *tbl, if (mlx5dr_table_is_root(tbl) || (miss_tbl && mlx5dr_table_is_root(miss_tbl)) || - (miss_tbl && miss_tbl->type != tbl->type) || - (miss_tbl && tbl->default_miss.miss_tbl)) { + (miss_tbl && miss_tbl->type != tbl->type)) { DR_LOG(ERR, "Invalid arguments"); rte_errno = EINVAL; return -rte_errno; @@ -625,6 +624,7 @@ int mlx5dr_table_set_default_miss(struct mlx5dr_table *tbl, struct mlx5dr_table *miss_tbl) { struct mlx5dr_context *ctx = tbl->ctx; + struct mlx5dr_table *old_miss_tbl; int ret; ret = mlx5dr_table_set_default_miss_not_valid(tbl, miss_tbl); @@ -632,15 +632,16 @@ int mlx5dr_table_set_default_miss(struct mlx5dr_table *tbl, return ret; pthread_spin_lock(&ctx->ctrl_lock); - + old_miss_tbl = tbl->default_miss.miss_tbl; ret = mlx5dr_table_connect_to_miss_table(tbl, miss_tbl); if (ret) goto out; + if (old_miss_tbl) + LIST_REMOVE(tbl, default_miss.next); + if (miss_tbl) LIST_INSERT_HEAD(&miss_tbl->default_miss.head, tbl, default_miss.next); - else - LIST_REMOVE(tbl, default_miss.next); pthread_spin_unlock(&ctx->ctrl_lock); return 0; -- 2.39.3