[PATCH 07/21] scsi: efct: Use IRQF_ONESHOT and default primary handler

Sebastian Andrzej Siewior posted 21 patches 2 weeks, 3 days ago
There is a newer version of this series
[PATCH 07/21] scsi: efct: Use IRQF_ONESHOT and default primary handler
Posted by Sebastian Andrzej Siewior 2 weeks, 3 days ago
There is no added value in efct_intr_msix() compared to
irq_default_primary_handler().

Using a threaded interrupt without a dedicated primary handler mandates
the IRQF_ONESHOT flag to mask the interrupt source while the threaded
handler is active. Otherwise the interrupt can fire again before the
threaded handler had a chance to run.

Use the default primary interrupt handler by specifying NULL and set
IRQF_ONESHOT so the interrupt source is masked until the secondary
handler is done.

Cc: Ram Vegesna <ram.vegesna@broadcom.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org
Cc: target-devel@vger.kernel.org
Fixes: 4df84e8466242 ("scsi: elx: efct: Driver initialization routines")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 drivers/scsi/elx/efct/efct_driver.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/scsi/elx/efct/efct_driver.c b/drivers/scsi/elx/efct/efct_driver.c
index 1bd42f7db1773..528399f725d42 100644
--- a/drivers/scsi/elx/efct/efct_driver.c
+++ b/drivers/scsi/elx/efct/efct_driver.c
@@ -415,12 +415,6 @@ efct_intr_thread(int irq, void *handle)
 	return IRQ_HANDLED;
 }
 
-static irqreturn_t
-efct_intr_msix(int irq, void *handle)
-{
-	return IRQ_WAKE_THREAD;
-}
-
 static int
 efct_setup_msix(struct efct *efct, u32 num_intrs)
 {
@@ -450,7 +444,7 @@ efct_setup_msix(struct efct *efct, u32 num_intrs)
 		intr_ctx->index = i;
 
 		rc = request_threaded_irq(pci_irq_vector(efct->pci, i),
-					  efct_intr_msix, efct_intr_thread, 0,
+					  NULL, efct_intr_thread, IRQF_ONESHOT,
 					  EFCT_DRIVER_NAME, intr_ctx);
 		if (rc) {
 			dev_err(&efct->pci->dev,
-- 
2.51.0
Re: [PATCH 07/21] scsi: efct: Use IRQF_ONESHOT and default primary handler
Posted by Martin K. Petersen 5 days, 10 hours ago
Sebastian,

> There is no added value in efct_intr_msix() compared to
> irq_default_primary_handler().
>
> Using a threaded interrupt without a dedicated primary handler mandates
> the IRQF_ONESHOT flag to mask the interrupt source while the threaded
> handler is active. Otherwise the interrupt can fire again before the
> threaded handler had a chance to run.

Applied to 6.20/scsi-staging, thanks!

-- 
Martin K. Petersen