It is preferrable to use request_firmware where sleeping is allowed. Using it under spinlock can cause blocking. Here, the function wd719x_chip_init calls request_firmware while holding a spinlock. So, let's access it outside the spinlock. Coccinelle is used to detect the issue. Signed-off-by: Vaishali Thakkar <vaishali.thakkar@xxxxxxxxxx> --- Please note that the patch is compile-tested only. And this change may require driver testing. --- drivers/scsi/wd719x.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/wd719x.c b/drivers/scsi/wd719x.c index e3da1a2..b8e57f3 100644 --- a/drivers/scsi/wd719x.c +++ b/drivers/scsi/wd719x.c @@ -518,13 +518,14 @@ static int wd719x_host_reset(struct scsi_cmnd *cmd) int result; dev_info(&wd->pdev->dev, "host reset requested\n"); - spin_lock_irqsave(wd->sh->host_lock, flags); + /* Try to reinit the RISC */ if (wd719x_chip_init(wd) == 0) result = SUCCESS; else result = FAILED; + spin_lock_irqsave(wd->sh->host_lock, flags); /* flush all SCBs */ list_for_each_entry_safe(scb, tmp, &wd->active_scbs, list) { struct scsi_cmnd *tmp_cmd = scb->cmd; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html