| From cd6d5cdc02c52ffec8dc01caeda3733baef69a9b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 7 May 2020 12:01:39 +0300 |
| Subject: net/mlx5: Wait for inactive autogroups |
| |
| From: Paul Blakey <paulb@mellanox.com> |
| |
| [ Upstream commit 49c0355d301b4e0e01e0f19ddbb023bd7d0ee48c ] |
| |
| Currently, if one thread tries to add an entry to an autogrouped table |
| with no free matching group, while another thread is in the process of |
| creating a new matching autogroup, it doesn't wait for the new group |
| creation, and creates an unnecessary new autogroup. |
| |
| Instead of skipping inactive, wait on the write lock of those groups. |
| |
| Signed-off-by: Paul Blakey <paulb@mellanox.com> |
| Reviewed-by: Roi Dayan <roid@mellanox.com> |
| Reviewed-by: Mark Bloch <markb@mellanox.com> |
| Reviewed-by: Maor Gottlieb <maorg@mellanox.com> |
| Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> |
| Stable-dep-of: 8ec40e3f1f72 ("net/mlx5: Fix return value when searching for existing flow group") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c |
| index 30d5b7f52a2a0..25f9185d5a15e 100644 |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c |
| @@ -1768,11 +1768,13 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft, |
| list_for_each_entry(iter, match_head, list) { |
| g = iter->g; |
| |
| - if (!g->node.active) |
| - continue; |
| - |
| nested_down_write_ref_node(&g->node, FS_LOCK_PARENT); |
| |
| + if (!g->node.active) { |
| + up_write_ref_node(&g->node, false); |
| + continue; |
| + } |
| + |
| err = insert_fte(g, fte); |
| if (err) { |
| up_write_ref_node(&g->node, false); |
| -- |
| 2.39.5 |
| |