linux/drivers/scsi
Martin K. Petersen a6478b26c8 Merge patch series "Introduce support for multiqueue (MQ) in fnic"
Karan Tilak Kumar <kartilak@cisco.com> says:

Hi Martin, reviewers,

This cover letter describes the feature: add support for
multiqueue (MQ) to fnic driver.

Background: The Virtual Interface Card (VIC) firmware exposes several
queues that can be configured for sending IOs and receiving IO
responses. Unified Computing System Manager (UCSM) and Intersight
Manager (IMM) allows users to configure the number of queues to be
used for IOs.

The number of IO queues to be used is stored in a configuration file
by the VIC firmware. The fNIC driver reads the configuration file and
sets the number of queues to be used. Previously, the driver was
hard-coded to use only one queue. With this set of changes, the fNIC
driver will configure itself to use multiple queues. This feature
takes advantage of the block multiqueue layer to parallelize IOs being
sent out of the VIC card.

Here's a brief description of some of the salient patches:

- vnic_scsi.h needs to be in sync with VIC firmware to be able to read
the number of queues from the firmware config file. A patch has been
created for this.
- In an environment with many fnics (like we see in our customer
environments), it is hard to distinguish which fnic is printing logs.
Therefore, an fnic number has been included in the logs.
- read the number of queues from the firmware config file.
- include definitions in fnic.h to support multiqueue.
- modify the interrupt service routines (ISRs) to read from the
correct registers. The numbers that are used here come from discussions
with the VIC firmware team.
- track IO statistics for different queues.
- remove usage of host_lock, and only use fnic_lock in the fnic driver.
- use a hardware queue based spinlock to protect io_req.
- replace the hard-coded zeroth queue with a hardware queue number.
This presents a bulk of the changes.
- modify the definition of fnic_queuecommand to accept multiqueue tags.
- improve log messages, and indicate fnic number and multiqueue tags for
effective debugging.

Even though the patches have been made into a series, some patches are
heavier than others.
But, every effort has been made to keep the purpose of each patch as
a single-purpose, and to compile cleanly.

This patchset has been tested as a whole. Therefore, the tested-by fields
have been added only to two patches
in the set. All the individual patches compile cleanly. However,
I've refrained from adding tested-by to
most of the patches, so as to not mislead the reviewer/reader.

A brief note on the unit tests:

1. Increase number of queues to 64. Load driver. Run IOs via Medusa.
12+ hour run successful.
2. Configure multipathing, and run link flaps on single link.
IOs drop briefly, but pick up as expected.
3. Configure multipathing, and run link flaps on two links, with a
30 second delay in between. IOs drop briefly, but pick up as expected.

Repeat the above tests with 1 queue and 32 queues.  All tests were
successful.

Please consider this patch series for the next merge window.

Link: https://lore.kernel.org/r/20231211173617.932990-1-kartilak@cisco.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2023-12-13 22:13:38 -05:00
..
aacraid Merge branch '6.5/scsi-fixes' into 6.6/scsi-staging 2023-08-30 20:56:24 -04:00
aic7xxx scsi: aic7xxx: Return negative error codes in aic7770_probe() 2023-12-05 21:18:40 -05:00
aic94xx scsi: libsas: Delete sas_ata_task.retry_count 2023-08-21 17:50:59 -04:00
arcmsr scsi: arcmsr: Update driver version to v1.51.00.14-20230915 2023-11-24 21:23:36 -05:00
arm scsi: powertec: Declare SCSI host template const 2023-03-24 19:19:21 -04:00
be2iscsi scsi: be2iscsi: Add length check when parsing nlattrs 2023-07-25 21:49:32 -04:00
bfa scsi: bfa: Use the proper data type for BLIST flags 2023-11-24 19:23:39 -05:00
bnx2fc scsi: bnx2fc: Replace deprecated strncpy() with strscpy() 2023-11-15 09:01:10 -05:00
bnx2i scsi: bnx2i: Replace all non-returning strlcpy with strscpy 2023-05-26 13:52:19 -07:00
csiostor scsi: csiostor: Replace deprecated strncpy() with strscpy() 2023-11-15 09:05:46 -05:00
cxgbi scsi: cxgbi: Fix 'generated' typo 2023-10-13 14:15:54 -04:00
cxlflash Driver core changes for 6.4-rc1 2023-04-27 11:53:57 -07:00
device_handler scsi: rdac: Fix sshdr use 2023-10-13 16:36:20 -04:00
elx scsi: elx: libefc: Replace deprecated strncpy() with strscpy_pad()/memcpy() 2023-11-15 09:46:03 -05:00
esas2r scsi: esas2r: Use FIELD_GET() to extract PCIe capability fields 2023-09-13 21:01:59 -04:00
fcoe scsi: fcoe: Fix potential deadlock on &fip->ctlr_lock 2023-08-21 17:13:56 -04:00
fnic Merge patch series "Introduce support for multiqueue (MQ) in fnic" 2023-12-13 22:13:38 -05:00
hisi_sas As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
ibmvscsi scsi: ibmvscsi: Replace deprecated strncpy() with strscpy() 2023-12-05 21:01:52 -05:00
ibmvscsi_tgt scsi: target: Have drivers report if they support direct submissions 2023-10-13 15:53:57 -04:00
isci scsi: isci: Remove redundant check in isci_task_request_build() 2023-12-05 21:13:15 -05:00
libfc scsi: libfc: Map FC_TIMED_OUT to DID_TIME_OUT 2023-12-05 21:32:11 -05:00
libsas scsi: libsas: Declare sas_discover_end_dev() static 2023-09-13 21:06:44 -04:00
lpfc scsi: lpfc: Copyright updates for 14.2.0.16 patches 2023-11-15 09:52:58 -05:00
megaraid Merge patch series "megaraid_sas: Driver version update to 07.727.03.00-rc1" 2023-10-13 16:52:47 -04:00
mpi3mr scsi: mpi3mr: Fix printk() format strings 2023-12-08 12:04:56 -05:00
mpt3sas scsi: mpt3sas: Suppress a warning in debug kernel 2023-11-15 10:50:31 -05:00
mvsas scsi: libsas: Delete sas_ssp_task.task_prio 2023-08-21 17:50:58 -04:00
pcmcia scsi: Add HAS_IOPORT dependencies 2023-05-31 19:59:26 -04:00
pm8001 scsi: pm8001: Remove PM8001_READ_VPD 2023-09-21 21:39:47 -04:00
qedf Merge patch series "scsi: EH rework prep patches, part 1" 2023-10-13 14:25:20 -04:00
qedi Merge branch '6.5/scsi-fixes' into 6.6/scsi-staging 2023-08-30 20:56:24 -04:00
qla2xxx As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
qla4xxx scsi: qla4xxx: Add length check when parsing nlattrs 2023-07-25 21:51:04 -04:00
smartpqi Merge patch series "smartpqi updates" 2023-08-24 22:58:36 -04:00
snic scsi: snic: Remove useless code in snic_dr_clean_pending_req() 2023-10-24 22:33:02 -04:00
sym53c8xx_2 scsi: sym53c8xx_2: Rework reset handling 2023-10-13 14:23:15 -04:00
.gitignore
3w-9xxx.c scsi: 3w-9xxx: Replace all non-returning strlcpy with strscpy 2023-05-26 13:52:19 -07:00
3w-9xxx.h
3w-sas.c scsi: 3w-sas: Replace deprecated strncpy() with strscpy() 2023-11-15 08:58:26 -05:00
3w-sas.h scsi: 3w-sas: Replace 1-element arrays with flexible array members 2023-01-12 00:09:52 -05:00
3w-xxxx.c scsi: 3w-xxxx: Add error handling for initialization failure in tw_probe() 2023-05-22 17:31:56 -04:00
3w-xxxx.h scsi: 3w-xxxx: Replace one-element array with flexible-array member 2022-09-25 13:06:00 -04:00
53c700_d.h_shipped
53c700.c scsi: 53c700: Check that command slot is not NULL 2023-07-31 14:38:17 -04:00
53c700.h
53c700.scr
a100u2w.c scsi: a100u2w: Declare SCSI host template const 2023-03-24 19:19:20 -04:00
a100u2w.h
a2091.c scsi: a2091: Declare SCSI host template const 2023-03-24 19:19:20 -04:00
a2091.h
a3000.c scsi: a3000: Convert to platform remove callback returning void 2023-12-05 21:51:36 -05:00
a3000.h
a4000t.c scsi: a4000t: Convert to platform remove callback returning void 2023-12-05 21:51:36 -05:00
advansys.c scsi: advansys: Declare SCSI host template const 2023-03-24 19:19:20 -04:00
aha152x.c scsi: aha152x: Declare SCSI host template const 2023-03-24 19:19:20 -04:00
aha152x.h
aha1542.c scsi: aha1542: Declare SCSI host template const 2023-03-24 19:19:21 -04:00
aha1542.h
aha1740.c scsi: aha1740: Declare SCSI host template const 2023-03-24 19:19:21 -04:00
aha1740.h
am53c974.c scsi: esp_scsi: Declare SCSI host template const 2023-03-24 19:19:22 -04:00
atari_scsi.c scsi: atari: Convert to platform remove callback returning void 2023-12-05 21:51:36 -05:00
atp870u.c scsi: atp870u: Declare SCSI host template const 2023-03-24 19:19:21 -04:00
atp870u.h
BusLogic.c scsi: BusLogic: Declare SCSI host template const 2023-03-24 19:19:20 -04:00
BusLogic.h
bvme6000_scsi.c scsi: bvme6000: Convert to platform remove callback returning void 2023-12-05 21:51:36 -05:00
ch.c scsi: ch: Replace deprecated strncpy() with strscpy() 2023-11-15 09:03:58 -05:00
constants.c
dc395x.c scsi: dc395x: Fix warning using plain integer as NULL 2023-11-24 21:08:23 -05:00
dc395x.h
dmx3191d.c scsi: dmx3191d: Declare SCSI host template const 2023-03-24 19:19:22 -04:00
esp_scsi.c scsi: esp_scsi: Declare SCSI host template const 2023-03-24 19:19:22 -04:00
esp_scsi.h scsi: esp_scsi: Declare SCSI host template const 2023-03-24 19:19:22 -04:00
fdomain_isa.c
fdomain_pci.c
fdomain.c scsi: fdomain: Declare SCSI host template const 2023-03-24 19:19:22 -04:00
fdomain.h
FlashPoint.c scsi: FlashPoint: Remove redundant variable bm_int_st 2022-08-01 19:52:03 -04:00
g_NCR5380.c scsi: NCR5380: Declare SCSI host template const 2023-03-24 19:19:22 -04:00
gvp11.c scsi: gvp11: Remove unused gvp11_setup() function 2023-08-21 16:37:11 -04:00
gvp11.h
hosts.c scsi: core: Use 32-bit hostnum in scsi_host_lookup() 2023-08-21 16:42:03 -04:00
hpsa_cmd.h
hpsa.c Merge patch series "Constify most SCSI host templates" 2023-03-24 20:13:03 -04:00
hpsa.h
hptiop.c overflow: Add struct_size_t() helper 2023-05-26 13:52:19 -07:00
hptiop.h scsi: hptiop: Replace one-element array with flexible-array member in struct hpt_iop_request_ioctl_command() 2022-09-25 13:04:17 -04:00
imm.c scsi: imm: Add a module parameter for the transfer mode 2023-09-13 21:11:55 -04:00
imm.h scsi: imm: Add a module parameter for the transfer mode 2023-09-13 21:11:55 -04:00
initio.c scsi: initio: Declare SCSI host template const 2023-03-24 19:19:56 -04:00
initio.h
ipr.c scsi: ipr: Remove obsolete check for old CPUs 2023-12-05 21:05:09 -05:00
ipr.h scsi: ipr: Remove SATA support 2023-04-18 23:01:23 -04:00
ips.c scsi: ips: Do not try to abort command from host reset 2023-10-13 14:23:15 -04:00
ips.h
iscsi_boot_sysfs.c
iscsi_tcp.c scsi: iscsi_tcp: restrict to TCP sockets 2023-09-17 17:46:13 +01:00
iscsi_tcp.h scsi: iscsi_tcp: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpage 2023-06-24 15:50:13 -07:00
jazz_esp.c scsi: jazz_esp: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
Kconfig scsi: imm: Add a module parameter for the transfer mode 2023-09-13 21:11:55 -04:00
lasi700.c
libiscsi_tcp.c scsi: iscsi: Remove iscsi_get_task back_lock requirement 2022-06-21 21:19:23 -04:00
libiscsi.c scsi: iscsi: Declare SCSI host template const 2023-03-24 19:19:57 -04:00
mac53c94.c scsi: mac53c94: Declare SCSI host template const 2023-03-24 19:19:57 -04:00
mac53c94.h scsi: mac53c94: Stop using struct scsi_pointer 2022-02-27 21:35:30 -05:00
mac_esp.c scsi: mac_esp: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
mac_scsi.c scsi: mac: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
Makefile scsi: dpt_i2o: Remove obsolete driver 2022-06-27 22:56:21 -04:00
megaraid.c scsi: megaraid: Fix up debug message in megaraid_abort_and_reset() 2023-10-24 22:40:39 -04:00
megaraid.h
mesh.c scsi: mesh: Declare SCSI host template const 2023-03-24 19:19:57 -04:00
mesh.h
mvme16x_scsi.c scsi: mvme16x: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
mvme147.c scsi: mvme147: Declare SCSI host template const 2023-03-24 19:19:57 -04:00
mvme147.h
mvumi.c scsi: core: Improve type safety of scsi_rescan_device() 2023-08-24 22:11:29 -04:00
mvumi.h scsi: mvumi: Replace 1-element arrays with flexible array members 2023-01-12 00:11:11 -05:00
myrb.c scsi: myrb: Declare SCSI host template const 2023-03-24 19:19:58 -04:00
myrb.h
myrs.c scsi: myrs: Declare SCSI host template const 2023-03-24 19:19:58 -04:00
myrs.h
ncr53c8xx.c scsi: ncr53c8xx: Replace strlcpy() with strscpy() 2023-06-21 21:13:00 -04:00
ncr53c8xx.h
NCR5380.c scsi: NCR5380: Use default @max_active for hostdata->work_q 2023-05-22 15:13:03 -10:00
NCR5380.h
nsp32_debug.c
nsp32_io.h
nsp32.c scsi: nsp32: Declare SCSI host template const 2023-03-24 19:19:58 -04:00
nsp32.h
pmcraid.c scsi: pmcraid: Add missing scsi_device_put() in pmcraid_eh_target_reset_handler() 2023-10-24 22:24:32 -04:00
pmcraid.h scsi: pmcraid: Remove the PMCRAID_PASSTHROUGH_IOCTL ioctl implementation 2022-03-29 23:32:26 -04:00
ppa.c scsi: ppa: Fix accidentally reversed conditions for 16-bit and 32-bit EPP 2023-09-05 05:26:49 -04:00
ppa.h scsi: ppa: Add a module parameter for the transfer mode 2023-08-21 16:32:40 -04:00
ps3rom.c scsi: ps3rom: Declare SCSI host template const 2023-03-24 19:19:58 -04:00
qla1280.c scsi: qla1280: Separate out host reset function from qla1280_error_action() 2023-10-13 14:23:15 -04:00
qla1280.h
qlogicfas408.c
qlogicfas408.h
qlogicfas.c
qlogicpti.c scsi: qlogicpti: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
qlogicpti.h
raid_class.c scsi: core: raid_class: Remove raid_component_add() 2023-08-24 21:34:28 -04:00
script_asm.pl
scsi_bsg.c scsi: replace the fmode_t argument to ->sg_io_fn with a simple bool 2023-06-12 08:04:04 -06:00
scsi_common.c scsi: core: Use min() instead of open-coding it 2023-05-31 11:05:34 -04:00
scsi_debug.c scsi: scsi_debug: Add param to control sdev's allow_restart 2023-10-16 20:50:12 -04:00
scsi_debugfs.c scsi: core: Report error list information in debugfs 2023-08-24 22:13:03 -04:00
scsi_debugfs.h
scsi_devinfo.c scsi: core: Add BLIST_SKIP_VPD_PAGES for SKhynix H28U74301AMR 2023-03-16 22:54:43 -04:00
scsi_dh.c
scsi_error.c scsi: core: Add a precondition check in scsi_eh_scmd_add() 2023-11-24 19:23:44 -05:00
scsi_ioctl.c scsi: replace the fmode_t argument to scsi_ioctl with a simple bool 2023-06-12 08:04:04 -06:00
scsi_lib_dma.c
scsi_lib.c scsi: core: Clean up scsi_dev_queue_ready() 2023-10-24 22:31:04 -04:00
scsi_logging.c scsi: core: scsi_logging: Fix a BUG 2022-03-29 23:29:19 -04:00
scsi_logging.h
scsi_netlink.c
scsi_pm.c
scsi_priv.h scsi: core: Improve type safety of scsi_rescan_device() 2023-08-24 22:11:29 -04:00
scsi_proc.c scsi: core: Fix legacy /proc parsing buffer overflow 2023-07-31 15:39:39 -04:00
scsi_sas_internal.h
scsi_scan.c scsi: Do not rescan devices with a suspended queue 2023-10-10 14:42:22 +09:00
scsi_sysctl.c scsi: Remove now superfluous sentinel element from ctl_table array 2023-10-11 12:16:13 -07:00
scsi_sysfs.c scsi: core: Improve type safety of scsi_rescan_device() 2023-08-24 22:11:29 -04:00
scsi_trace.c
scsi_transport_api.h
scsi_transport_fc.c scsi: core: Replace scsi_target_block() with scsi_block_targets() 2023-06-16 12:19:59 -04:00
scsi_transport_iscsi.c scsi: iscsi: Add strlen() check in iscsi_if_set{_host}_param() 2023-07-25 21:48:13 -04:00
scsi_transport_sas.c scsi: core: Support retrieving sub-pages of mode pages 2023-05-22 17:05:19 -04:00
scsi_transport_spi.c scsi: spi: Fix sshdr use 2023-10-13 16:36:20 -04:00
scsi_transport_srp.c scsi: core: Replace scsi_target_block() with scsi_block_targets() 2023-06-16 12:19:59 -04:00
scsi.c SCSI misc on 20231102 2023-11-02 15:13:50 -10:00
scsicam.c scsicam: Fix use of page cache 2022-05-08 14:28:18 -04:00
sd_dif.c scsi: sd: Update DIX config every time sd_revalidate_disk() is called 2023-02-21 22:00:32 -05:00
sd_trace.h scsi: sd: sd_zbc: Trace zone append emulation 2022-12-01 03:13:55 +00:00
sd_zbc.c scsi: sd_zbc: Set zone limits before revalidating zones 2023-07-05 21:58:10 -04:00
sd.c SCSI misc on 20231102 2023-11-02 15:13:50 -10:00
sd.h scsi: sd: Do not issue commands to suspended disks on shutdown 2023-09-28 21:23:18 +09:00
sense_codes.h
ses.c Driver core changes for 6.4-rc1 2023-04-27 11:53:57 -07:00
sg.c scsi: Remove now superfluous sentinel element from ctl_table array 2023-10-11 12:16:13 -07:00
sgiwd93.c scsi: sgiwd93: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
sim710.c
sni_53c710.c scsi: sni_53c710: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
sr_ioctl.c scsi: sr: Convert to scsi_execute_cmd() 2023-01-13 21:34:09 -05:00
sr_vendor.c
sr.c scsi: sr: Fix sshdr use in sr_get_events 2023-10-13 16:36:20 -04:00
sr.h sr: implement ->free_disk to simplify refcounting 2022-03-08 19:40:01 -07:00
st_options.h
st.c scsi: st: Add third party poweron reset handling 2023-08-24 22:16:28 -04:00
st.h scsi: don't use disk->private_data to find the scsi_driver 2022-03-08 19:40:00 -07:00
stex.c scsi: stex: Fix gcc 13 warnings 2023-05-31 11:36:40 -04:00
storvsc_drv.c Merge branch '6.5/scsi-fixes' into 6.6/scsi-staging 2023-08-30 20:56:24 -04:00
sun3_scsi_vme.c
sun3_scsi.c scsi: sun3: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
sun3x_esp.c scsi: sun3x_esp: Convert to platform remove callback returning void 2023-12-05 21:51:37 -05:00
sun_esp.c scsi: sun_esp: Convert to platform remove callback returning void 2023-12-05 21:51:38 -05:00
virtio_scsi.c scsi: core: Improve type safety of scsi_rescan_device() 2023-08-24 22:11:29 -04:00
vmw_pvscsi.c scsi: vmw_pvscsi: No need to clear memory after a dma_alloc_coherent() call 2022-04-06 23:01:54 -04:00
vmw_pvscsi.h scsi: vmw_pvscsi: Expand vcpuHint to 16 bits 2022-06-07 21:30:56 -04:00
wd33c93.c scsi: wd33c93: Remove dead code related to the long-gone config WD33C93_PIO 2022-09-25 13:29:53 -04:00
wd33c93.h scsi: wd33c93: Remove dead code related to the long-gone config WD33C93_PIO 2022-09-25 13:29:53 -04:00
wd719x.c scsi: wd719x: Declare SCSI host template const 2023-03-24 19:19:59 -04:00
wd719x.h
xen-scsifront.c scsi: xen-scsifront: shost_priv() can never return NULL 2023-08-24 22:06:44 -04:00
zalon.c
zorro7xx.c scsi: zorro7xx: Fix a resource leak in zorro7xx_remove_one() 2022-03-30 00:05:42 -04:00
zorro_esp.c scsi: esp_scsi: Declare SCSI host template const 2023-03-24 19:19:22 -04:00