mbox series

[00/25] lpfc updates for 12.2.0.0

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

Message

James Smart Dec. 26, 2018, 11:33 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 9M 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 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 4.21/scsi-queue tree


James Smart (25):
  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: cleanup: Remove lock on SCSI io completion
  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: 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 lpfc version to 12.2.0.0

 drivers/scsi/lpfc/lpfc.h           |   96 +-
 drivers/scsi/lpfc/lpfc_attr.c      |  477 +++++---
 drivers/scsi/lpfc/lpfc_crtn.h      |   34 +-
 drivers/scsi/lpfc/lpfc_ct.c        |   16 +-
 drivers/scsi/lpfc/lpfc_debugfs.c   | 1047 ++++++++++++----
 drivers/scsi/lpfc/lpfc_debugfs.h   |   71 +-
 drivers/scsi/lpfc/lpfc_els.c       |    4 +-
 drivers/scsi/lpfc/lpfc_hbadisc.c   |   38 +-
 drivers/scsi/lpfc/lpfc_hw4.h       |   14 +-
 drivers/scsi/lpfc/lpfc_init.c      | 2251 ++++++++++++++++++----------------
 drivers/scsi/lpfc/lpfc_nportdisc.c |    8 +-
 drivers/scsi/lpfc/lpfc_nvme.c      |  698 +++--------
 drivers/scsi/lpfc/lpfc_nvme.h      |   64 +-
 drivers/scsi/lpfc/lpfc_nvmet.c     |  446 ++++---
 drivers/scsi/lpfc/lpfc_nvmet.h     |    2 +
 drivers/scsi/lpfc/lpfc_scsi.c      |  821 ++++---------
 drivers/scsi/lpfc/lpfc_scsi.h      |   61 +-
 drivers/scsi/lpfc/lpfc_sli.c       | 2332 +++++++++++++++++++++++-------------
 drivers/scsi/lpfc/lpfc_sli.h       |   86 ++
 drivers/scsi/lpfc/lpfc_sli4.h      |  302 ++++-
 drivers/scsi/lpfc/lpfc_version.h   |    2 +-
 drivers/scsi/lpfc/lpfc_vport.c     |   25 +-
 22 files changed, 5054 insertions(+), 3841 deletions(-)