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.
57 lines
2.2 KiB
57 lines
2.2 KiB
4 years ago
|
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
|
||
|
|