| From: Parav Pandit <parav@mellanox.com> |
| Date: Thu, 12 Dec 2019 11:12:13 +0200 |
| Subject: IB/mlx4: Follow mirror sequence of device add during device removal |
| |
| commit 89f988d93c62384758b19323c886db917a80c371 upstream. |
| |
| Current code device add sequence is: |
| |
| ib_register_device() |
| ib_mad_init() |
| init_sriov_init() |
| register_netdev_notifier() |
| |
| Therefore, the remove sequence should be, |
| |
| unregister_netdev_notifier() |
| close_sriov() |
| mad_cleanup() |
| ib_unregister_device() |
| |
| However it is not above. |
| Hence, make do above remove sequence. |
| |
| Fixes: fa417f7b520ee ("IB/mlx4: Add support for IBoE") |
| Signed-off-by: Parav Pandit <parav@mellanox.com> |
| Reviewed-by: Maor Gottlieb <maorg@mellanox.com> |
| Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
| Link: https://lore.kernel.org/r/20191212091214.315005-3-leon@kernel.org |
| Signed-off-by: Doug Ledford <dledford@redhat.com> |
| [bwh: Backported to 3.16: No need to call mlx4_ib_diag_cleanup()] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/drivers/infiniband/hw/mlx4/main.c |
| +++ b/drivers/infiniband/hw/mlx4/main.c |
| @@ -2372,15 +2372,16 @@ static void mlx4_ib_remove(struct mlx4_d |
| ibdev->ib_active = false; |
| flush_workqueue(wq); |
| |
| - mlx4_ib_close_sriov(ibdev); |
| - mlx4_ib_mad_cleanup(ibdev); |
| - ib_unregister_device(&ibdev->ib_dev); |
| if (ibdev->iboe.nb.notifier_call) { |
| if (unregister_netdevice_notifier(&ibdev->iboe.nb)) |
| pr_warn("failure unregistering notifier\n"); |
| ibdev->iboe.nb.notifier_call = NULL; |
| } |
| |
| + mlx4_ib_close_sriov(ibdev); |
| + mlx4_ib_mad_cleanup(ibdev); |
| + ib_unregister_device(&ibdev->ib_dev); |
| + |
| mlx4_qp_release_range(dev, ibdev->steer_qpn_base, |
| ibdev->steer_qpn_count); |
| kfree(ibdev->ib_uc_qpns_bitmap); |