Skip to content

Commit

Permalink
net/mlx5: Do not hold group lock while allocating FTE in software
Browse files Browse the repository at this point in the history
FTE memory allocation using alloc_fte() doesn't have any dependency
on the flow group.
Hence, do not hold flow group lock while performing alloc_fte().
This helps to reduce contention of flow group lock.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
  • Loading branch information
Parav Pandit authored and Saeed Mahameed committed Nov 1, 2019
1 parent ae2741e commit 84c7af6
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1814,24 +1814,23 @@ _mlx5_add_flow_rules(struct mlx5_flow_table *ft,
return rule;
}

fte = alloc_fte(ft, spec, flow_act);
if (IS_ERR(fte)) {
up_write_ref_node(&ft->node, false);
err = PTR_ERR(fte);
goto err_alloc_fte;
}

nested_down_write_ref_node(&g->node, FS_LOCK_PARENT);
up_write_ref_node(&ft->node, false);

err = create_auto_flow_group(ft, g);
if (err)
goto err_release_fg;

fte = alloc_fte(ft, spec, flow_act);
if (IS_ERR(fte)) {
err = PTR_ERR(fte);
goto err_release_fg;
}

err = insert_fte(g, fte);
if (err) {
kmem_cache_free(steering->ftes_cache, fte);
if (err)
goto err_release_fg;
}

nested_down_write_ref_node(&fte->node, FS_LOCK_CHILD);
up_write_ref_node(&g->node, false);
Expand All @@ -1843,6 +1842,8 @@ _mlx5_add_flow_rules(struct mlx5_flow_table *ft,

err_release_fg:
up_write_ref_node(&g->node, false);
kmem_cache_free(steering->ftes_cache, fte);
err_alloc_fte:
tree_put_node(&g->node, false);
return ERR_PTR(err);
}
Expand Down

0 comments on commit 84c7af6

Please sign in to comment.