Update lpfc to revision 12.2.0.0
This first 22 patches in this patch set are a rework of the I/O
submission path in the driver to focus on cpu affinity. This work
raises the performance of the lpfc driver from a level of 1-2M iops
per port to numbers that have reached over 5M per port. The
modifications have been kept in separate function groupings of 1 per
patch. Unfortunately, some of the patches are still a bit daunting.
I've kept them as small as possible.
The changes can be summarized by the following:
- Separate buffer lists, each mapping to an exchange, were
maintained in both NVME and SCSI. This has all been commonized.
- The old lpfc io_channel was stripped out and replaced by
hardware queues. These are wq/cq pairs, 1 per protocol per cpu.
If there are less than cpu count, they are equitably distributed
among sockets/cores.
- MSIX vector allocation is attempted per hardware queue. If fewer
vectors than hardware queues, they are equitably distributed
among sockets/cores.
- XRI allocation is divided up amongst the hardware queues. An
early patch will commonize but place things on a single list.
A later patch will partition the list among the hardware queues
and a subsequent patch will finally implement a sharing scheme
between cpus.
- Interrupt handling and coalescing is closely looked at. The new
irq interfaces are used, several items were corrected, and much
better behaviors with the hardware were implemented.
- The scsi side is closely looked at to tie into SCSI MQ. NVME is
already in place.
- As everything is commonized and shared, NVME and SCSI are both
enabled by default.
- Along the way, other code cleanups and lock avoidance mods were
made.
The latter 2 patches (not including the copyrights or rev change)
are bug fixes for the nvme target module, whose changes are
dependent upon the submission path rework.
The patches were cut against Martin's 5.1/scsi-queue tree
V2:
Moved fof_eq snippet from patch 5 to patch 4 per suggestion.
Patch 8 (locking on io completion) moved to patch 21. Reworked
Locking on completion and abort paths.
Modified references to access_ok() for kernel api change.
Reworked as only scsi_mq is now supported. Removed references to
shost_use_scsi_mq() as well as driver addition of an
enable_scsi_mq flag and module parameter.
Added Copyright updates patch
James Smart (26):
lpfc: cleanup: remove nrport from nvme command structure
lpfc: cleanup: Remove excess check on NVME io submit code path
lpfc: Implement common IO buffers between NVME and SCSI
lpfc: Remove extra vector and SLI4 queue for Expresslane
lpfc: Replace io_channels for nvme and fcp with general hdw_queues per
cpu
lpfc: Partition XRI buffer list across Hardware Queues
lpfc: cleanup: Remove unused FCP_XRI_ABORT_EVENT slowpath event
lpfc: Adapt cpucheck debugfs logic to Hardware Queues
lpfc: Move SCSI and NVME Stats to hardware queue structures
lpfc: Convert ring number to hardware queue for nvme wqe posting.
lpfc: Synchronize hardware queues with SCSI MQ interface
lpfc: Adapt partitioned XRI lists to efficient sharing
lpfc: Allow override of hardware queue selection policies
lpfc: Fix setting affinity hints to correlate with hardware queues
lpfc: Support non-uniform allocation of MSIX vectors to hardware
queues
lpfc: cleanup: convert eq_delay to usdelay
lpfc: Rework EQ/CQ processing to address interrupt coalescing
lpfc: Utilize new IRQ API when allocating MSI-X vectors
lpfc: Resize cpu maps structures based on possible cpus
lpfc: Enable SCSI and NVME fc4s by default
lpfc: Rework locking on SCSI io completion
lpfc: Fix default driver parameter collision for allowing NPIV support
lpfc: Correct upcalling nvmet_fc transport during io done downcall
lpfc: Fix nvmet issues when link bounce under IO load
lpfc: Update 12.2.0.0 file copyrights to 2019
lpfc: Update lpfc version to 12.2.0.0
drivers/scsi/lpfc/lpfc.h | 97 +-
drivers/scsi/lpfc/lpfc_attr.c | 469 ++++---
drivers/scsi/lpfc/lpfc_crtn.h | 36 +-
drivers/scsi/lpfc/lpfc_ct.c | 18 +-
drivers/scsi/lpfc/lpfc_debugfs.c | 1049 ++++++++++++----
drivers/scsi/lpfc/lpfc_debugfs.h | 73 +-
drivers/scsi/lpfc/lpfc_els.c | 6 +-
drivers/scsi/lpfc/lpfc_hbadisc.c | 40 +-
drivers/scsi/lpfc/lpfc_hw4.h | 16 +-
drivers/scsi/lpfc/lpfc_init.c | 2250 +++++++++++++++++++---------------
drivers/scsi/lpfc/lpfc_nportdisc.c | 10 +-
drivers/scsi/lpfc/lpfc_nvme.c | 741 +++--------
drivers/scsi/lpfc/lpfc_nvme.h | 66 +-
drivers/scsi/lpfc/lpfc_nvmet.c | 448 ++++---
drivers/scsi/lpfc/lpfc_nvmet.h | 4 +-
drivers/scsi/lpfc/lpfc_scsi.c | 892 +++++---------
drivers/scsi/lpfc/lpfc_scsi.h | 63 +-
drivers/scsi/lpfc/lpfc_sli.c | 2378 +++++++++++++++++++++++-------------
drivers/scsi/lpfc/lpfc_sli.h | 89 +-
drivers/scsi/lpfc/lpfc_sli4.h | 304 ++++-
drivers/scsi/lpfc/lpfc_version.h | 4 +-
drivers/scsi/lpfc/lpfc_vport.c | 27 +-
22 files changed, 5151 insertions(+), 3929 deletions(-)
--
2.13.7