Skip to content

Commit 84c7af6

Browse files
paravmellanoxSaeed Mahameed
authored andcommitted
net/mlx5: Do not hold group lock while allocating FTE in software
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 <[email protected]> Reviewed-by: Daniel Jurgens <[email protected]> Reviewed-by: Mark Bloch <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent ae2741e commit 84c7af6

File tree

1 file changed

+10
-9
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+10
-9
lines changed

drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,24 +1814,23 @@ _mlx5_add_flow_rules(struct mlx5_flow_table *ft,
18141814
return rule;
18151815
}
18161816

1817+
fte = alloc_fte(ft, spec, flow_act);
1818+
if (IS_ERR(fte)) {
1819+
up_write_ref_node(&ft->node, false);
1820+
err = PTR_ERR(fte);
1821+
goto err_alloc_fte;
1822+
}
1823+
18171824
nested_down_write_ref_node(&g->node, FS_LOCK_PARENT);
18181825
up_write_ref_node(&ft->node, false);
18191826

18201827
err = create_auto_flow_group(ft, g);
18211828
if (err)
18221829
goto err_release_fg;
18231830

1824-
fte = alloc_fte(ft, spec, flow_act);
1825-
if (IS_ERR(fte)) {
1826-
err = PTR_ERR(fte);
1827-
goto err_release_fg;
1828-
}
1829-
18301831
err = insert_fte(g, fte);
1831-
if (err) {
1832-
kmem_cache_free(steering->ftes_cache, fte);
1832+
if (err)
18331833
goto err_release_fg;
1834-
}
18351834

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

18441843
err_release_fg:
18451844
up_write_ref_node(&g->node, false);
1845+
kmem_cache_free(steering->ftes_cache, fte);
1846+
err_alloc_fte:
18461847
tree_put_node(&g->node, false);
18471848
return ERR_PTR(err);
18481849
}

0 commit comments

Comments
 (0)