Commit eccec8da authored by Paul Blakey's avatar Paul Blakey Committed by David S. Miller

net/mlx5: Keep autogroups list ordered

Finding a new autogroup range is done by going over a group list
sorted by each group start index. The search is stopped after finding
the first free range. Adding the newly created group to the list is
wrongly added to the end of the list regardless of its start index as
the parameter of where to insert it is ignored.

This commit makes sure to use that unused parameter to insert
it where requested.

Fixes: f0d22d18 ('net/mlx5_core: Introduce flow steering autogrouped flow table')
Signed-off-by: default avatarPaul Blakey <paulb@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bba1574c
...@@ -879,7 +879,7 @@ static struct mlx5_flow_group *create_flow_group_common(struct mlx5_flow_table * ...@@ -879,7 +879,7 @@ static struct mlx5_flow_group *create_flow_group_common(struct mlx5_flow_table *
tree_init_node(&fg->node, !is_auto_fg, del_flow_group); tree_init_node(&fg->node, !is_auto_fg, del_flow_group);
tree_add_node(&fg->node, &ft->node); tree_add_node(&fg->node, &ft->node);
/* Add node to group list */ /* Add node to group list */
list_add(&fg->node.list, ft->node.children.prev); list_add(&fg->node.list, prev_fg);
return fg; return fg;
} }
...@@ -893,7 +893,7 @@ struct mlx5_flow_group *mlx5_create_flow_group(struct mlx5_flow_table *ft, ...@@ -893,7 +893,7 @@ struct mlx5_flow_group *mlx5_create_flow_group(struct mlx5_flow_table *ft,
return ERR_PTR(-EPERM); return ERR_PTR(-EPERM);
lock_ref_node(&ft->node); lock_ref_node(&ft->node);
fg = create_flow_group_common(ft, fg_in, &ft->node.children, false); fg = create_flow_group_common(ft, fg_in, ft->node.children.prev, false);
unlock_ref_node(&ft->node); unlock_ref_node(&ft->node);
return fg; return fg;
...@@ -1012,7 +1012,7 @@ static struct mlx5_flow_group *create_autogroup(struct mlx5_flow_table *ft, ...@@ -1012,7 +1012,7 @@ static struct mlx5_flow_group *create_autogroup(struct mlx5_flow_table *ft,
u32 *match_criteria) u32 *match_criteria)
{ {
int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in); int inlen = MLX5_ST_SZ_BYTES(create_flow_group_in);
struct list_head *prev = &ft->node.children; struct list_head *prev = ft->node.children.prev;
unsigned int candidate_index = 0; unsigned int candidate_index = 0;
struct mlx5_flow_group *fg; struct mlx5_flow_group *fg;
void *match_criteria_addr; void *match_criteria_addr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment