net/mlx5e: Don't hold encap tbl lock if there is no encap action
The cited commit holds encap tbl lock unconditionally when setting
up dests. But it may cause the following deadlock:
PID:
1063722 TASK:
ffffa062ca5d0000 CPU: 13 COMMAND: "handler8"
#0 [
ffffb14de05b7368] __schedule at
ffffffffa1d5aa91
#1 [
ffffb14de05b7410] schedule at
ffffffffa1d5afdb
#2 [
ffffb14de05b7430] schedule_preempt_disabled at
ffffffffa1d5b528
#3 [
ffffb14de05b7440] __mutex_lock at
ffffffffa1d5d6cb
#4 [
ffffb14de05b74e8] mutex_lock_nested at
ffffffffa1d5ddeb
#5 [
ffffb14de05b74f8] mlx5e_tc_tun_encap_dests_set at
ffffffffc12f2096 [mlx5_core]
#6 [
ffffb14de05b7568] post_process_attr at
ffffffffc12d9fc5 [mlx5_core]
#7 [
ffffb14de05b75a0] mlx5e_tc_add_fdb_flow at
ffffffffc12de877 [mlx5_core]
#8 [
ffffb14de05b75f0] __mlx5e_add_fdb_flow at
ffffffffc12e0eef [mlx5_core]
#9 [
ffffb14de05b7660] mlx5e_tc_add_flow at
ffffffffc12e12f7 [mlx5_core]
#10 [
ffffb14de05b76b8] mlx5e_configure_flower at
ffffffffc12e1686 [mlx5_core]
#11 [
ffffb14de05b7720] mlx5e_rep_indr_offload at
ffffffffc12e3817 [mlx5_core]
#12 [
ffffb14de05b7730] mlx5e_rep_indr_setup_tc_cb at
ffffffffc12e388a [mlx5_core]
#13 [
ffffb14de05b7740] tc_setup_cb_add at
ffffffffa1ab2ba8
#14 [
ffffb14de05b77a0] fl_hw_replace_filter at
ffffffffc0bdec2f [cls_flower]
#15 [
ffffb14de05b7868] fl_change at
ffffffffc0be6caa [cls_flower]
#16 [
ffffb14de05b7908] tc_new_tfilter at
ffffffffa1ab71f0
[
1031218.028143] wait_for_completion+0x24/0x30
[
1031218.028589] mlx5e_update_route_decap_flows+0x9a/0x1e0 [mlx5_core]
[
1031218.029256] mlx5e_tc_fib_event_work+0x1ad/0x300 [mlx5_core]
[
1031218.029885] process_one_work+0x24e/0x510
Actually no need to hold encap tbl lock if there is no encap action.
Fix it by checking if encap action exists or not before holding
encap tbl lock.
Fixes: 37c3b9fa7ccf ("net/mlx5e: Prevent encap offload when neigh update is running")
Signed-off-by: Chris Mi <cmi@nvidia.com>
Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>