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