RDMA/bnxt_re: Fix hang during driver unload
authorSelvin Xavier <selvin.xavier@broadcom.com>
Fri, 14 Jul 2023 08:22:49 +0000 (01:22 -0700)
committerLeon Romanovsky <leon@kernel.org>
Mon, 17 Jul 2023 05:02:13 +0000 (08:02 +0300)
commit29900bf351e1a7e4643da5c3c3cd9df75c577b88
treee21541b7f2369316488e610c7407fa66b9a73d25
parentb5bbc6551297447d3cca55cf907079e206e9cd82
RDMA/bnxt_re: Fix hang during driver unload

Driver unload hits a hang during stress testing of load/unload.

stack trace snippet -

tasklet_kill at ffffffff9aabb8b2
bnxt_qplib_nq_stop_irq at ffffffffc0a805fb [bnxt_re]
bnxt_qplib_disable_nq at ffffffffc0a80c5b [bnxt_re]
bnxt_re_dev_uninit at ffffffffc0a67d15 [bnxt_re]
bnxt_re_remove_device at ffffffffc0a6af1d [bnxt_re]

tasklet_kill can hang if the tasklet is scheduled after it is disabled.

Modified the sequences to disable the interrupt first and synchronize
irq before disabling the tasklet.

Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Link: https://lore.kernel.org/r/1689322969-25402-3-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/bnxt_re/qplib_fp.c
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c