From: Hannes Reinecke <hare@kernel.org>
To: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: James Bottomley <james.bottomley@hansenpartnership.com>,
linux-scsi@vger.kernel.org,
Karan Tilak Kumar <kartilak@cisco.com>,
Sesidhar Baddela <sebaddel@cisco.com>,
Satish Kharat <satishkh@cisco.com>,
Hannes Reinecke <hare@kernel.org>
Subject: [PATCH 4/4] fnic: make interrupt mode configurable
Date: Tue, 4 Nov 2025 11:04:24 +0100 [thread overview]
Message-ID: <20251104100424.8215-5-hare@kernel.org> (raw)
In-Reply-To: <20251104100424.8215-1-hare@kernel.org>
In some environments (eg kdump) not all CPUs are online, so the MQ
mapping might be resulting in an invalid layout. So make the interrupt
mode settable via an 'fnic_intr_mode' module parameter and switch
to INTx if the 'reset_devices' kernel parameter is specified.
Signed-off-by: Hannes Reinecke <hare@kernel.org>
---
drivers/scsi/fnic/fnic.h | 2 +-
drivers/scsi/fnic/fnic_isr.c | 13 +++++++++----
drivers/scsi/fnic/fnic_main.c | 10 +++++++++-
3 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h
index 1199d701c3f5..c679283955e9 100644
--- a/drivers/scsi/fnic/fnic.h
+++ b/drivers/scsi/fnic/fnic.h
@@ -484,7 +484,7 @@ extern struct workqueue_struct *fnic_fip_queue;
extern const struct attribute_group *fnic_host_groups[];
void fnic_clear_intr_mode(struct fnic *fnic);
-int fnic_set_intr_mode(struct fnic *fnic);
+int fnic_set_intr_mode(struct fnic *fnic, unsigned int mode);
int fnic_set_intr_mode_msix(struct fnic *fnic);
void fnic_free_intr(struct fnic *fnic);
int fnic_request_intr(struct fnic *fnic);
diff --git a/drivers/scsi/fnic/fnic_isr.c b/drivers/scsi/fnic/fnic_isr.c
index e16b76d537e8..b6594ad064ca 100644
--- a/drivers/scsi/fnic/fnic_isr.c
+++ b/drivers/scsi/fnic/fnic_isr.c
@@ -319,20 +319,25 @@ int fnic_set_intr_mode_msix(struct fnic *fnic)
return 1;
}
-int fnic_set_intr_mode(struct fnic *fnic)
+int fnic_set_intr_mode(struct fnic *fnic, unsigned int intr_mode)
{
int ret_status = 0;
/*
* Set interrupt mode (INTx, MSI, MSI-X) depending
* system capabilities.
- *
+ */
+ if (intr_mode != VNIC_DEV_INTR_MODE_MSIX)
+ goto try_msi;
+ /*
* Try MSI-X first
*/
ret_status = fnic_set_intr_mode_msix(fnic);
if (ret_status == 0)
return ret_status;
-
+try_msi:
+ if (intr_mode != VNIC_DEV_INTR_MODE_MSI)
+ goto try_intx;
/*
* Next try MSI
* We need 1 RQ, 1 WQ, 1 WQ_COPY, 3 CQs, and 1 INTR
@@ -358,7 +363,7 @@ int fnic_set_intr_mode(struct fnic *fnic)
return 0;
}
-
+try_intx:
/*
* Next try INTx
* We need 1 RQ, 1 WQ, 1 WQ_COPY, 3 CQs, and 3 INTRs
diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c
index 870b265be41a..4bdd55958f59 100644
--- a/drivers/scsi/fnic/fnic_main.c
+++ b/drivers/scsi/fnic/fnic_main.c
@@ -97,6 +97,10 @@ module_param(pc_rscn_handling_feature_flag, uint, 0644);
MODULE_PARM_DESC(pc_rscn_handling_feature_flag,
"PCRSCN handling (0 for none. 1 to handle PCRSCN (default))");
+static unsigned int fnic_intr_mode = VNIC_DEV_INTR_MODE_MSIX;
+module_param(fnic_intr_mode, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(fnic_intr_mode, "Interrupt mode, 1 = INTx, 2 = MSI, 3 = MSIx (default: 3)");
+
struct workqueue_struct *reset_fnic_work_queue;
struct workqueue_struct *fnic_fip_queue;
@@ -869,7 +873,11 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
fnic_get_res_counts(fnic);
- err = fnic_set_intr_mode(fnic);
+ /* Override interrupt selection during kdump */
+ if (reset_devices)
+ fnic_intr_mode = VNIC_DEV_INTR_MODE_INTX;
+
+ err = fnic_set_intr_mode(fnic, fnic_intr_mode);
if (err) {
dev_err(&fnic->pdev->dev, "Failed to set intr mode, "
"aborting.\n");
--
2.43.0
next prev parent reply other threads:[~2025-11-04 10:04 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-04 10:04 [PATCH 0/4] fnic: fixup INTx and MSI interrupt modes Hannes Reinecke
2025-11-04 10:04 ` [PATCH 1/4] fnic: use resulting interrupt mode during configuration Hannes Reinecke
2025-11-04 23:17 ` Karan Tilak Kumar (kartilak)
2025-11-06 21:56 ` Karan Tilak Kumar (kartilak)
2025-11-04 10:04 ` [PATCH 2/4] fnic: correctly initialize 'fnic->name' Hannes Reinecke
2025-11-04 23:18 ` Karan Tilak Kumar (kartilak)
2025-11-06 21:57 ` Karan Tilak Kumar (kartilak)
2025-11-04 10:04 ` [PATCH 3/4] fnic: missing initialisation for wq_copy_base Hannes Reinecke
2025-11-04 23:19 ` Karan Tilak Kumar (kartilak)
2025-11-06 22:00 ` Karan Tilak Kumar (kartilak)
2025-11-04 10:04 ` Hannes Reinecke [this message]
2025-11-04 23:21 ` [PATCH 4/4] fnic: make interrupt mode configurable Karan Tilak Kumar (kartilak)
2025-11-06 22:09 ` Karan Tilak Kumar (kartilak)
2025-11-07 8:29 ` Hannes Reinecke
2025-11-07 22:23 ` Karan Tilak Kumar (kartilak)
2026-01-14 17:02 ` Karan Tilak Kumar (kartilak)
2026-01-23 18:21 ` Lee Duncan
2026-01-23 18:37 ` Karan Tilak Kumar (kartilak)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251104100424.8215-5-hare@kernel.org \
--to=hare@kernel.org \
--cc=james.bottomley@hansenpartnership.com \
--cc=kartilak@cisco.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=satishkh@cisco.com \
--cc=sebaddel@cisco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.