Merge tag 'mlx5-next-netdev-deadlock' of git://git.kernel.org/pub/scm/linux/kernel...
authorJakub Kicinski <kuba@kernel.org>
Thu, 9 Feb 2023 05:00:54 +0000 (21:00 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 9 Feb 2023 05:01:17 +0000 (21:01 -0800)
Saeed Mahameed says:

====================
mlx5-next-netdev-deadlock

This series from Jiri solves a deadlock when removing a network namespace
with mlx5 devlink instance being in it.
The deadlock is between:
1) mlx5_ib->unregister_netdevice_notifier()
AND
2) mlx5_core->devlink_reload->cleanup_net()

To slove this introduced mlx5 netdev added/removed events to track uplink
netdev to be used for register_netdevice_notifier_dev_net() purposes.

* tag 'mlx5-next-netdev-deadlock' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux:
  RDMA/mlx5: Track netdev to avoid deadlock during netdev notifier unregister
  net/mlx5e: Propagate an internal event in case uplink netdev changes
  net/mlx5e: Fix trap event handling
  net/mlx5: Introduce CQE error syndrome
====================

Link: https://lore.kernel.org/r/20230208005626.72930-1-saeed@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1  2 
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
drivers/net/ethernet/mellanox/mlx5/core/devlink.h
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/lib/mlx5.h
drivers/net/ethernet/mellanox/mlx5/core/main.c
include/linux/mlx5/device.h
include/linux/mlx5/driver.h
include/linux/mlx5/mlx5_ifc.h

@@@ -6004,10 -5978,10 +6008,11 @@@ err_devlink_unregister
  
  static void mlx5e_remove(struct auxiliary_device *adev)
  {
 -      struct mlx5e_priv *priv = auxiliary_get_drvdata(adev);
 +      struct mlx5e_dev *mlx5e_dev = auxiliary_get_drvdata(adev);
 +      struct mlx5e_priv *priv = mlx5e_dev->priv;
        pm_message_t state = {};
  
+       mlx5_core_uplink_netdev_set(priv->mdev, NULL);
        mlx5e_dcbnl_delete_app(priv);
        unregister_netdev(priv->netdev);
        mlx5e_suspend(adev, state);
Simple merge
@@@ -672,7 -675,7 +673,8 @@@ struct mlx5e_resources 
        } hw_objs;
        struct devlink_port dl_port;
        struct net_device *uplink_netdev;
+       struct mutex uplink_netdev_lock;
 +      struct mlx5_crypto_dek_priv *dek_priv;
  };
  
  enum mlx5_sw_icm_type {
Simple merge