[PATCH 02/17] lpfc: NVME Initiator: Base modifications Part A

Hannes Reinecke hare at suse.de
Tue Jan 17 23:07:46 PST 2017


On 01/18/2017 02:20 AM, James Smart wrote:
> 
> NVME Initiator: Base modifications
> 
> This is part A of parts A..F.
> 
> Part A is the bulk of the file list changed by the modifications as
> most mods are small-ish. Changes may be for any aspect below.
> 
> *********
> 
> This set of patches (6 parts) adds base modifications for NVME initiator
> support to the lpfc driver.
> 
> The base modifications consist of:
> - Formal split of SLI3 rings from SLI-4 WQs (sometimes referred to as
>   rings as well) as implementation now widely varies between the two.
> - Addition of configuration modes:
>    SCSI initiator only; NVME initiator only; NVME target only; and
>    SCSI and NVME initiator.
>    The configuration mode drives overall adapter configuration,
>    offloads enabled, and resource splits.
>    NVME support is only available on SLI-4 devices and newer fw.
> - Implements the following based on configuration mode:
>   - Exchange resources are split by protocol; Obviously, if only
>      1 mode, then no split occurs. Default is 50/50. module attribute
>      allows tuning.
>   - Each protocol has it's own set of queues, but share interrupt
>     vectors.
>      SCSI:
>        SLI3 devices have few queues and the original style of queue
>          allocation remains.
>        SLI4 devices piggy back on an "io-channel" concept that
>          eventually needs to merge with scsi-mq/blk-mq support (it is
> 	 underway).  For now, the paradigm continues as it existed
> 	 prior. io channel allocates N msix and N WQs (N=4 default)
> 	 and either round robins or uses cpu # modulo N for scheduling.
> 	 A bunch of module parameters allow the configuration to be
> 	 tuned.
>      NVME (initiator):
>        Allocates an msix per cpu (or whatever pci_alloc_irq_vectors
>          gets)
>        Allocates a WQ per cpu, and maps the WQs to msix on a WQ #
>          modulo msix vector count basis.
>        Module parameters exist to cap/control the config if desired.
>   - Each protocol has its own buffer and dma pools.
> 
> Unfortunately, it was very difficult to break out the above into
> functional patches. A such, they are presented as a 6-patch set to
> keep email size reasonable. All patches in the set must be applied to
> create a functional unit.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy at broadcom.com>
> Signed-off-by: James Smart <james.smart at broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc.h           |  77 ++++++++++++++--
>  drivers/scsi/lpfc/lpfc_attr.h      |   1 +
>  drivers/scsi/lpfc/lpfc_bsg.c       |  37 ++++++--
>  drivers/scsi/lpfc/lpfc_crtn.h      |  44 ++++++++-
>  drivers/scsi/lpfc/lpfc_disc.h      |   1 +
>  drivers/scsi/lpfc/lpfc_els.c       |  56 ++++++++----
>  drivers/scsi/lpfc/lpfc_hbadisc.c   | 148 +++++++++++++++++++-----------
>  drivers/scsi/lpfc/lpfc_hw.h        |   5 +-
>  drivers/scsi/lpfc/lpfc_hw4.h       | 183 +++++++++++++++++++++++++++++++++++--
>  drivers/scsi/lpfc/lpfc_logmsg.h    |   4 +
>  drivers/scsi/lpfc/lpfc_mbox.c      |  47 ++++++----
>  drivers/scsi/lpfc/lpfc_mem.c       | 111 ++++++++++++++++------
>  drivers/scsi/lpfc/lpfc_nportdisc.c |   9 +-
>  drivers/scsi/lpfc/lpfc_nvme.h      |  87 ++++++++++++++++++
>  drivers/scsi/lpfc/lpfc_scsi.c      | 140 +++++++++++++++++++---------
>  drivers/scsi/lpfc/lpfc_scsi.h      |  18 ++--
>  drivers/scsi/lpfc/lpfc_sli.h       |  37 ++++++--
>  drivers/scsi/lpfc/lpfc_sli4.h      |  75 +++++++++++----
>  drivers/scsi/lpfc/lpfc_version.h   |   1 +
>  drivers/scsi/lpfc/lpfc_vport.c     |   3 +
>  20 files changed, 854 insertions(+), 230 deletions(-)
>  create mode 100644 drivers/scsi/lpfc/lpfc_nvme.h
> 
[ .. ]
> @@ -605,7 +610,7 @@ lpfc_sli4_fcp_xri_aborted(struct lpfc_hba *phba,
>  }
>  
>  /**
> - * lpfc_sli4_post_scsi_sgl_list - Post blocks of scsi buffer sgls from a list
> + * lpfc_sli4_post_scsi_sgl_list - Psot blocks of scsi buffer sgls from a list
>   * @phba: pointer to lpfc hba data structure.
>   * @post_sblist: pointer to the scsi buffer list.
>   *

Psot?

> @@ -734,7 +739,7 @@ lpfc_sli4_post_scsi_sgl_list(struct lpfc_hba *phba,
>  }
>  
>  /**
> - * lpfc_sli4_repost_scsi_sgl_list - Repost all the allocated scsi buffer sgls
> + * lpfc_sli4_repost_scsi_sgl_list - Repsot all the allocated scsi buffer sgls
>   * @phba: pointer to lpfc hba data structure.
>   *
>   * This routine walks the list of scsi buffers that have been allocated and

Repsot? The reverse of 'Psot'?

[ .. ]
> @@ -1133,7 +1138,7 @@ lpfc_release_scsi_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *psb)
>   *
>   * This routine does the pci dma mapping for scatter-gather list of scsi cmnd
>   * field of @lpfc_cmd for device with SLI-3 interface spec. This routine scans
> - * through sg elements and format the bde. This routine also initializes all
> + * through sg elements and format the bdea. This routine also initializes all
>   * IOCB fields which are dependent on scsi command request buffer.
>   *
>   * Return codes:

bdea?

[ .. ]
> @@ -4997,7 +5006,7 @@ lpfc_send_taskmgmt(struct lpfc_vport *vport, struct scsi_cmnd *cmnd,
>  	if ((status != IOCB_SUCCESS) ||
>  	    (iocbqrsp->iocb.ulpStatus != IOSTAT_SUCCESS)) {
>  		if (status != IOCB_SUCCESS ||
> -		    iocbqrsp->iocb.ulpStatus != IOSTAT_FCP_RSP_ERROR)
> +			iocbqrsp->iocb.ulpStatus != IOSTAT_FCP_RSP_ERROR)
>  			lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
>  					 "0727 TMF %s to TGT %d LUN %llu "
>  					 "failed (%d, %d) iocb_flag x%x\n",

Wrong indent.

[ .. ]
> diff --git a/drivers/scsi/lpfc/lpfc_scsi.h b/drivers/scsi/lpfc/lpfc_scsi.h
> index 8cb80da..def0c0a5 100644
> --- a/drivers/scsi/lpfc/lpfc_scsi.h
> +++ b/drivers/scsi/lpfc/lpfc_scsi.h
> @@ -135,6 +135,8 @@ struct lpfc_scsi_buf {
>  
>  	uint32_t timeout;
>  
> +	uint16_t flags;  /* TBD convert exch_busy to flags */
> +#define LPFC_SBUF_XBUSY         0x1     /* SLI4 hba reported XB on WCQE cmpl */
>  	uint16_t exch_busy;     /* SLI4 hba reported XB on complete WCQE */
>  	uint16_t status;	/* From IOCB Word 7- ulpStatus */
>  	uint32_t result;	/* From IOCB Word 4. */

I thought I had a patch for that ... lemme see.

Other than that:

Reviewed-by: Hannes Reinecke <hare at suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare at suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)



More information about the Linux-nvme mailing list