aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_init.c
diff options
context:
space:
mode:
authorJames Smart <jsmart2021@gmail.com>2019-08-14 16:56:52 -0700
committerMartin K. Petersen <martin.petersen@oracle.com>2019-08-19 22:41:10 -0400
commit894bb17f0cb07a6503d096dbbd156e38a3640822 (patch)
tree39829040f70718ecfcff7381691172f6339e186f /drivers/scsi/lpfc/lpfc_init.c
parentscsi: lpfc: Fix error in remote port address change (diff)
downloadlinux-dev-894bb17f0cb07a6503d096dbbd156e38a3640822.tar.xz
linux-dev-894bb17f0cb07a6503d096dbbd156e38a3640822.zip
scsi: lpfc: Fix deadlock on host_lock during cable pulls
During cable pull testing a deadlock was seen between lpfc_nlp_counters() vs lpfc_mbox_process_link_up() vs lpfc_work_list_done(). They are all waiting on the shost->host_lock. Issue is all of these cases raise irq when taking out the lock but use spin_unlock_irq() when unlocking. The unlock path is will unconditionally re-enable interrupts in cases where irq state should be preserved. The re-enablement allowed the other paths to execute which then causes the deadlock. Fix by converting the lock/unlock to irqsave/irqrestore. Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions