Patch "net/mlx5_core: Fix soft lockup in steering error flow" has been added to the 4.5-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net/mlx5_core: Fix soft lockup in steering error flow
to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mlx5_core-fix-soft-lockup-in-steering-error-flow.patch
and it can be found in the queue-4.5 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon May 16 11:20:33 PDT 2016
From: Maor Gottlieb <[email protected]>
Date: Fri, 22 Apr 2016 00:33:00 +0300
Subject: net/mlx5_core: Fix soft lockup in steering error flow
From: Maor Gottlieb <[email protected]>
[ Upstream commit c3f9bf628bc7edda298897d952f5e761137229c9 ]
In the error flow of adding flow rule to auto-grouped flow table, we call to tree_remove_node.
tree_remove_node locks the node's parent, however the node's parent is already locked by mlx5_add_flow_rule and this causes a deadlock. After this patch, if we failed to add the flow rule, we unlock the flow table before calling to tree_remove_node.
flow table')
--- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 46 ++++++++-------------- 1 file changed, 17 insertions(+), 29 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +17 -29
@@ -957,33 +957,6 @@ unlock_fg:return rule; } -static struct mlx5_flow_rule *add_rule_to_auto_fg (struct mlx5_flow_table *ft, -u8 match_criteria_enable, -u32 *match_criteria, -u32 *match_value, -u8 action, -u32 flow_tag, -struct mlx5_flow_destination *dest) -{ -struct mlx5_flow_rule *rule; -struct mlx5_flow_group *g; - - g =create_autogroup (ft, match_criteria_enable, match_criteria); -if (IS_ERR (g)) -return (void *)g; - - rule =add_rule_fg (g, match_value, - action, flow_tag, dest); -if (IS_ERR (rule)) { -/* Remove assumes refcount > 0 and autogroup creates a group -* with a refcount = 0. -*/ -tree_get_node (&g->node); -tree_remove_node (&g->node); - } -return rule; -} -struct mlx5_flow_rule * mlx5_add_flow_rule(struct mlx5_flow_table *ft, u8 match_criteria_enable,
@@ -1008,8 +981,23 @@ mlx5_add_flow_rule(struct mlx5_flow_tabl goto unlock; } - rule =add_rule_to_auto_fg (ft, match_criteria_enable, match_criteria, - match_value, action, flow_tag, dest); + g =create_autogroup (ft, match_criteria_enable, match_criteria); +if (IS_ERR (g)) { + rule = (void *)g; + goto unlock; + } + + rule =add_rule_fg (g, match_value, + action, flow_tag, dest); +if (IS_ERR (rule)) { +/* Remove assumes refcount > 0 and autogroup creates a group +* with a refcount = 0. +*/ +unlock_ref_node (&ft->node); +tree_get_node (&g->node); +tree_remove_node (&g->node); +return rule; + } unlock:unlock_ref_node (&ft->node);return rule;
Patches currently in stable-queue which might be from [email protected] are
queue-4.5/net-mlx5_core-fix-soft-lockup-in-steering-error-flow.patch