See: https://github.com/spdk/spdk/issues/3345 See: https://lore.kernel.org/netdev/c51bef25-e8c5-492d-bb80-965b7f8542f7@nvidia.com/T/#t --- drivers/net/ethernet/mellanox/mlx5/core/main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 331ce47f51a1..a8a4b5ec8051 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c @@ -1298,6 +1298,9 @@ static int mlx5_function_teardown(struct mlx5_core_dev *dev, bool boot) if (!err) mlx5_function_disable(dev, boot); + else + mlx5_stop_health_poll(dev, boot); + return err; } -- 2.39.2 See: https://github.com/spdk/spdk/issues/3345 See: https://lore.kernel.org/netdev/c51bef25-e8c5-492d-bb80-965b7f8542f7@nvidia.com/T/#t --- drivers/infiniband/hw/mlx5/cq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c index 9773d2a3d97f..05e3214af61f 100644 --- a/drivers/infiniband/hw/mlx5/cq.c +++ b/drivers/infiniband/hw/mlx5/cq.c @@ -614,7 +614,6 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) int soft_polled = 0; int npolled; - spin_lock_irqsave(&cq->lock, flags); if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) { /* make sure no soft wqe's are waiting */ if (unlikely(!list_empty(&cq->wc_list))) @@ -625,6 +624,7 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) goto out; } + spin_lock_irqsave(&cq->lock, flags); if (unlikely(!list_empty(&cq->wc_list))) soft_polled = poll_soft_wc(cq, num_entries, wc, false); @@ -635,9 +635,9 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) if (npolled) mlx5_cq_set_ci(&cq->mcq); -out: spin_unlock_irqrestore(&cq->lock, flags); +out: return soft_polled + npolled; } -- 2.39.2