mbox series

[v2,00/26] lpfc updates for 12.2.0.0

Message ID 20190122181431.8297-1-jsmart2021@gmail.com (mailing list archive)
Headers show
Series lpfc updates for 12.2.0.0 | expand

Message

James Smart Jan. 22, 2019, 6:14 p.m. UTC
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(-)