You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmod-redhat-mpt3sas/SOURCES/0019-scsi-scsi-mpt3sas-Fix-...

57 lines
2.2 KiB

From 563c853944c49fd4ef847f722ab97ad6760a58f7 Mon Sep 17 00:00:00 2001
From: Tomas Henzl <thenzl@redhat.com>
Date: Mon, 23 Nov 2020 17:12:04 -0500
Subject: [PATCH 19/33] [scsi] scsi: mpt3sas: Fix timeouts observed while
reenabling IRQ
Message-id: <20201123171204.21755-2-thenzl@redhat.com>
Patchwork-id: 341324
Patchwork-instance: patchwork
O-Subject: [RHEL8.4 e-stor PATCH 1/1] scsi: mpt3sas: Fix timeouts observed while reenabling IRQ
Bugzilla: 1880114
RH-Acked-by: Maurizio Lombardi <mlombard@redhat.com>
RH-Acked-by: David Milburn <dmilburn@redhat.com>
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>
(cherry picked from commit 5feed64f9199ff90c4239971733f23f30aeb2484)
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
drivers/scsi/mpt3sas/mpt3sas_base.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index b096917fc314..a0ab44d520f6 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -1740,6 +1740,13 @@ _base_irqpoll(struct irq_poll *irqpoll, int budget)
reply_q->irq_poll_scheduled = false;
reply_q->irq_line_enable = true;
enable_irq(reply_q->os_irq);
+ /*
+ * Go for one more round of processing the
+ * reply descriptor post queue incase if HBA
+ * Firmware has posted some reply descriptors
+ * while reenabling the IRQ.
+ */
+ _base_process_reply_queue(reply_q);
}
return num_entries;
--
2.13.6