linux/drivers/net/ethernet/mellanox/mlx5/core
Parav Pandit fbdd0049d9 RDMA/mlx5: Fix devlink deadlock on net namespace deletion
When a mlx5 core devlink instance is reloaded in different net namespace,
its associated IB device is deleted and recreated.

Example sequence is:
$ ip netns add foo
$ devlink dev reload pci/0000:00:08.0 netns foo
$ ip netns del foo

mlx5 IB device needs to attach and detach the netdevice to it through the
netdev notifier chain during load and unload sequence.  A below call graph
of the unload flow.

cleanup_net()
   down_read(&pernet_ops_rwsem); <- first sem acquired
     ops_pre_exit_list()
       pre_exit()
         devlink_pernet_pre_exit()
           devlink_reload()
             mlx5_devlink_reload_down()
               mlx5_unload_one()
               [...]
                 mlx5_ib_remove()
                   mlx5_ib_unbind_slave_port()
                     mlx5_remove_netdev_notifier()
                       unregister_netdevice_notifier()
                         down_write(&pernet_ops_rwsem);<- recurrsive lock

Hence, when net namespace is deleted, mlx5 reload results in deadlock.

When deadlock occurs, devlink mutex is also held. This not only deadlocks
the mlx5 device under reload, but all the processes which attempt to
access unrelated devlink devices are deadlocked.

Hence, fix this by mlx5 ib driver to register for per net netdev notifier
instead of global one, which operats on the net namespace without holding
the pernet_ops_rwsem.

Fixes: 4383cfcc65 ("net/mlx5: Add devlink reload")
Link: https://lore.kernel.org/r/20201026134359.23150-1-parav@nvidia.com
Signed-off-by: Parav Pandit <parav@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-10-26 19:18:19 -03:00
..
accel net/mlx5: IPsec: make spdxcheck.py happy 2020-09-16 14:34:32 +02:00
diag net/mlx5: Add support for fw live patch event 2020-10-09 12:06:53 -07:00
en net/mlx5: Add NIC TX domain namespace 2020-10-12 15:37:44 -07:00
en_accel net/mlx5e: IPsec: Add Connect-X IPsec Tx data path offload 2020-10-12 15:37:45 -07:00
esw net/mlx5: E-switch, Move devlink eswitch ports closer to eswitch 2020-09-30 21:26:29 -07:00
fpga net/mlx5: Use dma device access helper 2020-09-30 21:26:30 -07:00
ipoib RDMA/mlx5: Delete duplicated mlx5_ptys_width enum 2020-09-17 19:33:03 +03:00
lib RDMA/mlx5: Fix devlink deadlock on net namespace deletion 2020-10-26 19:18:19 -03:00
steering net/mlx5: Use dma device access helper 2020-09-30 21:26:30 -07:00
alloc.c net/mlx5: Use dma device access helper 2020-09-30 21:26:30 -07:00
cmd.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
cq.c net: mlx: convert tasklets to use new tasklet_setup() API 2020-09-14 13:02:37 -07:00
debugfs.c
dev.c
devlink.c net/mlx5: Add support for devlink reload limit no reset 2020-10-09 12:06:53 -07:00
devlink.h
ecpf.c net/mlx5: simplify the return expression of mlx5_ec_init() 2020-09-23 15:44:39 -07:00
ecpf.h
en_arfs.c net/mlx5e: API to manipulate TTC rules destinations 2020-06-27 14:00:18 -07:00
en_common.c net/mlx5e: Add support for PCI relaxed ordering 2020-07-28 02:37:49 -07:00
en_dcbnl.c net/mlx5e: Fix port buffers cell size value 2020-07-09 19:27:07 -07:00
en_dim.c
en_ethtool.c net/mlx5e: Enhanced TX MPWQE for SKBs 2020-09-21 19:41:16 -07:00
en_fs_ethtool.c xsk: i40e: ice: ixgbe: mlx5: Pass buffer pool to driver instead of umem 2020-08-31 21:15:03 +02:00
en_fs.c net/mlx5e: Fix VLAN create flow 2020-10-02 10:59:58 -07:00
en_main.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
en_rep.c net/mlx5: E-switch, Move devlink eswitch ports closer to eswitch 2020-09-30 21:26:29 -07:00
en_rep.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
en_rx.c net/mlx5e: Add tc chains offload support for nic flows 2020-09-23 15:44:36 -07:00
en_selftest.c net/mlx5e: RX, Add a prefetch command for small L1_CACHE_BYTES 2020-08-26 15:55:53 -07:00
en_stats.c mlx5-updates-2020-09-21 2020-09-22 17:44:59 -07:00
en_stats.h mlx5-updates-2020-09-21 2020-09-22 17:44:59 -07:00
en_tc.c net/mlx5: Fix uininitialized pointer read on pointer attr 2020-10-12 15:37:44 -07:00
en_tc.h net/mlx5e: Support CT offload for tc nic flows 2020-09-23 15:44:36 -07:00
en_tx.c net/mlx5e: IPsec: Add Connect-X IPsec Tx data path offload 2020-10-12 15:37:45 -07:00
en_txrx.c net/mlx5e: Use synchronize_rcu to sync with NAPI 2020-09-21 17:22:21 -07:00
en.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
eq.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
eswitch_offloads_termtbl.c net/mlx5: Refactor tc flow attributes structure 2020-09-23 15:44:35 -07:00
eswitch_offloads.c net/mlx5: E-Switch, Support flow source for local vport 2020-09-30 21:26:30 -07:00
eswitch.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-08-02 01:02:12 -07:00
eswitch.h net/mlx5: E-switch, Move devlink eswitch ports closer to eswitch 2020-09-30 21:26:29 -07:00
events.c
fs_cmd.c net/mlx5: Add NIC TX domain namespace 2020-10-12 15:37:44 -07:00
fs_cmd.h
fs_core.c net/mlx5: Add NIC TX domain namespace 2020-10-12 15:37:44 -07:00
fs_core.h net/mlx5: Avoid eswitch header inclusion in fs core layer 2020-06-27 13:50:46 -07:00
fs_counters.c
fw_reset.c net/mlx5: Add support for fw live patch event 2020-10-09 12:06:53 -07:00
fw_reset.h net/mlx5: Add devlink param enable_remote_dev_reset support 2020-10-09 12:06:53 -07:00
fw.c net/mlx5: IPsec: Add HW crypto offload support 2020-07-16 16:36:44 -07:00
health.c net/mlx5: Handle sync reset request event 2020-10-09 12:06:52 -07:00
Kconfig net/mlx5: IPsec: Add HW crypto offload support 2020-07-16 16:36:44 -07:00
lag_mp.c net/mlx5e: Add LAG warning if bond slave is not lag master 2020-09-15 11:59:51 -07:00
lag_mp.h
lag.c net/mlx5e: Add LAG warning if bond slave is not lag master 2020-09-15 11:59:51 -07:00
lag.h net/mlx5e: Add LAG warning if bond slave is not lag master 2020-09-15 11:59:51 -07:00
main.c net/mlx5: Handle sync reset request event 2020-10-09 12:06:52 -07:00
Makefile net/mlx5: Add functions to set/query MFRL register 2020-10-09 12:06:52 -07:00
mcg.c
mlx5_core.h net/mlx5: Handle sync reset request event 2020-10-09 12:06:52 -07:00
mr.c
pagealloc.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
pci_irq.c net/mlx5: Fix request_irqs error flow 2020-10-02 10:59:56 -07:00
pd.c
port.c net/mlx5: Refactor query port speed functions 2020-09-17 19:33:02 +03:00
rdma.c
rdma.h
rl.c
sriov.c
transobj.c
uar.c
vport.c net/mlx5: Use fallthrough pseudo-keyword 2020-07-28 02:37:55 -07:00
wq.c
wq.h net/mlx5e: Add helper to get the RQ WQE counter 2020-07-02 21:05:18 -07:00