Skip to content

Commit 5feed64

Browse files
sreekanthbrcmmartinkpetersen
authored andcommitted
scsi: mpt3sas: Fix timeouts observed while reenabling IRQ
While reenabling the IRQ after irq poll there may be small time window where HBA firmware has posted some replies and raise the interrupts but driver has not received the interrupts. So we may observe I/O timeouts as the driver has not processed the replies as interrupts got missed while reenabling the IRQ. To fix this issue the driver has to go for one more round of processing the reply descriptors from reply descriptor post queue after enabling the IRQ. Link: https://lore.kernel.org/r/20201102072746.27410-1-sreekanth.reddy@broadcom.com Reported-by: Tomas Henzl <thenzl@redhat.com> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 5faf50e commit 5feed64

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

drivers/scsi/mpt3sas/mpt3sas_base.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1740,6 +1740,13 @@ _base_irqpoll(struct irq_poll *irqpoll, int budget)
17401740
reply_q->irq_poll_scheduled = false;
17411741
reply_q->irq_line_enable = true;
17421742
enable_irq(reply_q->os_irq);
1743+
/*
1744+
* Go for one more round of processing the
1745+
* reply descriptor post queue incase if HBA
1746+
* Firmware has posted some reply descriptors
1747+
* while reenabling the IRQ.
1748+
*/
1749+
_base_process_reply_queue(reply_q);
17431750
}
17441751

17451752
return num_entries;

0 commit comments

Comments
 (0)