All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/19] lpfc updates for 11.4.0.7
@ 2018-01-24 22:45 James Smart
  2018-01-24 22:45 ` [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs James Smart
                   ` (18 more replies)
  0 siblings, 19 replies; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart

This patch set provides a number of fixes for the driver.

The patches were cut against the Martin's 4.16/scsi-queue tree.
There are no outside dependencies and are expected to be pulled
via Martins tree.


James Smart (19):
  lpfc: Fix frequency of Release WQE CQEs
  lpfc: Increase CQ and WQ sizes for SCSI
  lpfc: move placement of target destroy on driver detach
  lpfc: correct debug counters for abort
  lpfc: Add WQ Full Logic for NVME Target
  lpfc: Fix PRLI handling when topology type changes
  lpfc: Fix IO failure during hba reset testing with nvme io.
  lpfc: Fix RQ empty firmware trap
  lpfc: Allow set of maximum outstanding SCSI cmd limit for a target
    parameter
  lpfc: Fix soft lockup in lpfc worker thread during LIP testing
  lpfc: Fix issue_lip if link is disabled
  lpfc: Indicate CONF support in NVMe PRLI
  lpfc: Fix SCSI io host reset causing kernel crash
  lpfc: Validate adapter support for SRIU option
  lpfc: Fix header inclusion in lpfc_nvmet
  lpfc: Treat SCSI Write operation Underruns as an error
  lpfc: Fix nonrecovery of NVME controller after cable swap.
  lpfc: update driver version to 11.4.0.7
  lpfc: Update modified files for 2018 Copyright

 drivers/scsi/lpfc/lpfc.h           |   3 +-
 drivers/scsi/lpfc/lpfc_attr.c      |  17 +++-
 drivers/scsi/lpfc/lpfc_crtn.h      |   3 +-
 drivers/scsi/lpfc/lpfc_els.c       |   5 +-
 drivers/scsi/lpfc/lpfc_hbadisc.c   |   7 +-
 drivers/scsi/lpfc/lpfc_hw4.h       |  14 +++-
 drivers/scsi/lpfc/lpfc_init.c      |  63 +++++++++++----
 drivers/scsi/lpfc/lpfc_mbox.c      |   6 +-
 drivers/scsi/lpfc/lpfc_mem.c       |  10 ++-
 drivers/scsi/lpfc/lpfc_nportdisc.c |   7 +-
 drivers/scsi/lpfc/lpfc_nvme.c      |  29 ++++---
 drivers/scsi/lpfc/lpfc_nvmet.c     | 155 +++++++++++++++++++++++++++++++++----
 drivers/scsi/lpfc/lpfc_nvmet.h     |  10 ++-
 drivers/scsi/lpfc/lpfc_scsi.c      |  49 ++++++++----
 drivers/scsi/lpfc/lpfc_sli.c       |  36 ++++++++-
 drivers/scsi/lpfc/lpfc_sli4.h      |  12 ++-
 drivers/scsi/lpfc/lpfc_version.h   |   4 +-
 17 files changed, 330 insertions(+), 100 deletions(-)

-- 
2.13.1

^ permalink raw reply	[flat|nested] 39+ messages in thread

* [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  7:50   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 02/19] lpfc: Increase CQ and WQ sizes for SCSI James Smart
                   ` (17 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

The driver controls when the hardware sends completions that
communicate consumption of elements from the WQ. This is done by
setting a WQEC bit on a WQE.

The current driver sets it on every Nth WQE posting. However, the
driver isn't clearing the bit if the WQE is reused. Thus, if the
queue depth isn't evenly divisible by N, with enough time, it can
be set on every element, creating a lot of overhead and risking
CQ full conditions.

Correct by clearing the bit when not setting it on an Nth element.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_sli.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 5f5528a12308..149f21f53b13 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -129,6 +129,8 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
 	/* set consumption flag every once in a while */
 	if (!((q->host_index + 1) % q->entry_repost))
 		bf_set(wqe_wqec, &wqe->generic.wqe_com, 1);
+	else
+		bf_set(wqe_wqec, &wqe->generic.wqe_com, 0);
 	if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED)
 		bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id);
 	lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size);
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 02/19] lpfc: Increase CQ and WQ sizes for SCSI
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
  2018-01-24 22:45 ` [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  7:54   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 03/19] lpfc: move placement of target destroy on driver detach James Smart
                   ` (16 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Increased CQ and WQ sizes for SCSI FCP, matching those used
for NVMe development.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc.h      |  1 +
 drivers/scsi/lpfc/lpfc_hw4.h  |  3 +++
 drivers/scsi/lpfc/lpfc_init.c | 30 ++++++++++++++++++++++--------
 drivers/scsi/lpfc/lpfc_sli.c  |  3 ++-
 drivers/scsi/lpfc/lpfc_sli4.h |  5 +++++
 5 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index 61fb46da05d4..d042f9118e3b 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -760,6 +760,7 @@ struct lpfc_hba {
 	uint8_t  mds_diags_support;
 	uint32_t initial_imax;
 	uint8_t  bbcredit_support;
+	uint8_t  enab_exp_wqcq_pages;
 
 	/* HBA Config Parameters */
 	uint32_t cfg_ack0;
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 73c2f6971d2b..ef469129fb71 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -3212,6 +3212,9 @@ struct lpfc_sli4_parameters {
 #define cfg_cqv_SHIFT				14
 #define cfg_cqv_MASK				0x00000003
 #define cfg_cqv_WORD				word4
+#define cfg_cqpsize_SHIFT			16
+#define cfg_cqpsize_MASK			0x000000ff
+#define cfg_cqpsize_WORD			word4
 	uint32_t word5;
 	uint32_t word6;
 #define cfg_mqv_SHIFT				14
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index f539c554588c..5b96bf0d3331 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -8011,9 +8011,10 @@ static int
 lpfc_alloc_fcp_wq_cq(struct lpfc_hba *phba, int wqidx)
 {
 	struct lpfc_queue *qdesc;
+	uint32_t wqesize;
 
 	/* Create Fast Path FCP CQs */
-	if (phba->fcp_embed_io)
+	if (phba->enab_exp_wqcq_pages)
 		/* Increase the CQ size when WQEs contain an embedded cdb */
 		qdesc = lpfc_sli4_queue_alloc(phba, LPFC_EXPANDED_PAGE_SIZE,
 					      phba->sli4_hba.cq_esize,
@@ -8031,15 +8032,18 @@ lpfc_alloc_fcp_wq_cq(struct lpfc_hba *phba, int wqidx)
 	phba->sli4_hba.fcp_cq[wqidx] = qdesc;
 
 	/* Create Fast Path FCP WQs */
-	if (phba->fcp_embed_io)
 		/* Increase the WQ size when WQEs contain an embedded cdb */
+	if (phba->enab_exp_wqcq_pages) {
+		wqesize = (phba->fcp_embed_io) ?
+			LPFC_WQE128_SIZE : phba->sli4_hba.wq_esize;
 		qdesc = lpfc_sli4_queue_alloc(phba, LPFC_EXPANDED_PAGE_SIZE,
-					      LPFC_WQE128_SIZE,
+					      wqesize,
 					      LPFC_WQE_EXP_COUNT);
-	else
+	} else {
 		qdesc = lpfc_sli4_queue_alloc(phba, LPFC_DEFAULT_PAGE_SIZE,
 					      phba->sli4_hba.wq_esize,
 					      phba->sli4_hba.wq_ecount);
+	}
 	if (!qdesc) {
 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
 				"0503 Failed allocate fast-path FCP WQ (%d)\n",
@@ -10485,6 +10489,12 @@ lpfc_get_sli4_parameters(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
 	else
 		phba->fcp_embed_io = 0;
 
+	if ((bf_get(cfg_cqpsize, mbx_sli4_parameters) & LPFC_CQ_16K_PAGE_SZ) &&
+	    (bf_get(cfg_wqpsize, mbx_sli4_parameters) & LPFC_WQ_16K_PAGE_SZ) &&
+	    (sli4_params->wqsize & LPFC_WQ_SZ128_SUPPORT))
+		phba->enab_exp_wqcq_pages = 1;
+	else
+		phba->enab_exp_wqcq_pages = 0;
 	/*
 	 * Check if the SLI port supports MDS Diagnostics
 	 */
@@ -12227,6 +12237,7 @@ int
 lpfc_fof_queue_create(struct lpfc_hba *phba)
 {
 	struct lpfc_queue *qdesc;
+	uint32_t wqesize;
 
 	/* Create FOF EQ */
 	qdesc = lpfc_sli4_queue_alloc(phba, LPFC_DEFAULT_PAGE_SIZE,
@@ -12240,7 +12251,7 @@ lpfc_fof_queue_create(struct lpfc_hba *phba)
 	if (phba->cfg_fof) {
 
 		/* Create OAS CQ */
-		if (phba->fcp_embed_io)
+		if (phba->enab_exp_wqcq_pages)
 			qdesc = lpfc_sli4_queue_alloc(phba,
 						      LPFC_EXPANDED_PAGE_SIZE,
 						      phba->sli4_hba.cq_esize,
@@ -12256,16 +12267,19 @@ lpfc_fof_queue_create(struct lpfc_hba *phba)
 		phba->sli4_hba.oas_cq = qdesc;
 
 		/* Create OAS WQ */
-		if (phba->fcp_embed_io)
+		if (phba->enab_exp_wqcq_pages) {
+			wqesize = (phba->fcp_embed_io) ?
+				LPFC_WQE128_SIZE : phba->sli4_hba.wq_esize;
 			qdesc = lpfc_sli4_queue_alloc(phba,
 						      LPFC_EXPANDED_PAGE_SIZE,
-						      LPFC_WQE128_SIZE,
+						      wqesize,
 						      LPFC_WQE_EXP_COUNT);
-		else
+		} else {
 			qdesc = lpfc_sli4_queue_alloc(phba,
 						      LPFC_DEFAULT_PAGE_SIZE,
 						      phba->sli4_hba.wq_esize,
 						      phba->sli4_hba.wq_ecount);
+		}
 		if (!qdesc)
 			goto out_error;
 
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 149f21f53b13..d08d9b48f6b1 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -14910,7 +14910,8 @@ lpfc_wq_create(struct lpfc_hba *phba, struct lpfc_queue *wq,
 	bf_set(lpfc_mbox_hdr_version, &shdr->request,
 	       phba->sli4_hba.pc_sli4_params.wqv);
 
-	if (phba->sli4_hba.pc_sli4_params.wqsize & LPFC_WQ_SZ128_SUPPORT)
+	if ((phba->sli4_hba.pc_sli4_params.wqsize & LPFC_WQ_SZ128_SUPPORT) ||
+	    (wq->page_size > SLI4_PAGE_SIZE))
 		wq_create_version = LPFC_Q_CREATE_VERSION_1;
 	else
 		wq_create_version = LPFC_Q_CREATE_VERSION_0;
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index 81fb58e59e60..a9af9980fc43 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -485,6 +485,11 @@ struct lpfc_pc_sli4_params {
 	uint8_t wqpcnt;
 };
 
+#define LPFC_CQ_4K_PAGE_SZ	0x1
+#define LPFC_CQ_16K_PAGE_SZ	0x4
+#define LPFC_WQ_4K_PAGE_SZ	0x1
+#define LPFC_WQ_16K_PAGE_SZ	0x4
+
 struct lpfc_iov {
 	uint32_t pf_number;
 	uint32_t vf_number;
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 03/19] lpfc: move placement of target destroy on driver detach
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
  2018-01-24 22:45 ` [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs James Smart
  2018-01-24 22:45 ` [PATCH 02/19] lpfc: Increase CQ and WQ sizes for SCSI James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  7:54   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 04/19] lpfc: correct debug counters for abort James Smart
                   ` (15 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Ensure nvme localports/targetports are torn down before
dismantling the adapter sli interface on driver detachment.
This aids leaving interfaces live while nvme may be making
callbacks to abort it.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_init.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 5b96bf0d3331..851d4e889042 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -11503,13 +11503,6 @@ lpfc_pci_remove_one_s4(struct pci_dev *pdev)
 	/* Remove FC host and then SCSI host with the physical port */
 	fc_remove_host(shost);
 	scsi_remove_host(shost);
-	/*
-	 * Bring down the SLI Layer. This step disables all interrupts,
-	 * clears the rings, discards all mailbox commands, and resets
-	 * the HBA FCoE function.
-	 */
-	lpfc_debugfs_terminate(vport);
-	lpfc_sli4_hba_unset(phba);
 
 	/* Perform ndlp cleanup on the physical port.  The nvme and nvmet
 	 * localports are destroyed after to cleanup all transport memory.
@@ -11518,6 +11511,13 @@ lpfc_pci_remove_one_s4(struct pci_dev *pdev)
 	lpfc_nvmet_destroy_targetport(phba);
 	lpfc_nvme_destroy_localport(vport);
 
+	/*
+	 * Bring down the SLI Layer. This step disables all interrupts,
+	 * clears the rings, discards all mailbox commands, and resets
+	 * the HBA FCoE function.
+	 */
+	lpfc_debugfs_terminate(vport);
+	lpfc_sli4_hba_unset(phba);
 
 	lpfc_stop_hba_timers(phba);
 	spin_lock_irq(&phba->hbalock);
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 04/19] lpfc: correct debug counters for abort
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (2 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 03/19] lpfc: move placement of target destroy on driver detach James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  7:55   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 05/19] lpfc: Add WQ Full Logic for NVME Target James Smart
                   ` (14 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Existing code was using the wrong field for the completion status
when comparing whether to increment abort statistics

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_nvmet.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 8dbf5c9d51aa..7927ac46d345 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -130,7 +130,7 @@ lpfc_nvmet_xmt_ls_rsp_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
 	if (tgtp) {
 		if (status) {
 			atomic_inc(&tgtp->xmt_ls_rsp_error);
-			if (status == IOERR_ABORT_REQUESTED)
+			if (result == IOERR_ABORT_REQUESTED)
 				atomic_inc(&tgtp->xmt_ls_rsp_aborted);
 			if (bf_get(lpfc_wcqe_c_xb, wcqe))
 				atomic_inc(&tgtp->xmt_ls_rsp_xb_set);
@@ -541,7 +541,7 @@ lpfc_nvmet_xmt_fcp_op_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
 		rsp->transferred_length = 0;
 		if (tgtp) {
 			atomic_inc(&tgtp->xmt_fcp_rsp_error);
-			if (status == IOERR_ABORT_REQUESTED)
+			if (result == IOERR_ABORT_REQUESTED)
 				atomic_inc(&tgtp->xmt_fcp_rsp_aborted);
 		}
 
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 05/19] lpfc: Add WQ Full Logic for NVME Target
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (3 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 04/19] lpfc: correct debug counters for abort James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:00   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 06/19] lpfc: Fix PRLI handling when topology type changes James Smart
                   ` (13 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

I/O conditions on the nvme target may have the driver submitting
to a full hardware wq. The hardware wq is a shared resource among
all nvme controllers. When the driver hit a full wq, it failed the
io posting back to the nvme-fc transport, which then escalated it
into errors.

Correct by maintaining a sideband queue within the driver that is
added to when the WQ full condition is hit, and drained from as soon
as new WQ space opens up.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_crtn.h  |   1 +
 drivers/scsi/lpfc/lpfc_nvmet.c | 116 +++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/lpfc/lpfc_nvmet.h |   1 +
 drivers/scsi/lpfc/lpfc_sli.c   |   3 ++
 drivers/scsi/lpfc/lpfc_sli4.h  |   5 +-
 5 files changed, 125 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index 559f9aa0ed08..3ecf50df93f4 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -254,6 +254,7 @@ void lpfc_nvmet_ctxbuf_post(struct lpfc_hba *phba,
 			    struct lpfc_nvmet_ctxbuf *ctxp);
 int lpfc_nvmet_rcv_unsol_abort(struct lpfc_vport *vport,
 			       struct fc_frame_header *fc_hdr);
+void lpfc_nvmet_wqfull_process(struct lpfc_hba *phba, struct lpfc_queue *wq);
 void lpfc_sli_flush_nvme_rings(struct lpfc_hba *phba);
 void lpfc_nvme_wait_for_io_drain(struct lpfc_hba *phba);
 void lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *, struct fcf_record *,
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 7927ac46d345..9c2acf90212c 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -71,6 +71,8 @@ static int lpfc_nvmet_unsol_fcp_issue_abort(struct lpfc_hba *,
 static int lpfc_nvmet_unsol_ls_issue_abort(struct lpfc_hba *,
 					   struct lpfc_nvmet_rcv_ctx *,
 					   uint32_t, uint16_t);
+static void lpfc_nvmet_wqfull_flush(struct lpfc_hba *, struct lpfc_queue *,
+				    struct lpfc_nvmet_rcv_ctx *);
 
 void
 lpfc_nvmet_defer_release(struct lpfc_hba *phba, struct lpfc_nvmet_rcv_ctx *ctxp)
@@ -741,7 +743,10 @@ lpfc_nvmet_xmt_fcp_op(struct nvmet_fc_target_port *tgtport,
 	struct lpfc_nvmet_rcv_ctx *ctxp =
 		container_of(rsp, struct lpfc_nvmet_rcv_ctx, ctx.fcp_req);
 	struct lpfc_hba *phba = ctxp->phba;
+	struct lpfc_queue *wq;
 	struct lpfc_iocbq *nvmewqeq;
+	struct lpfc_sli_ring *pring;
+	unsigned long iflags;
 	int rc;
 
 	if (phba->pport->load_flag & FC_UNLOADING) {
@@ -820,6 +825,21 @@ lpfc_nvmet_xmt_fcp_op(struct nvmet_fc_target_port *tgtport,
 		return 0;
 	}
 
+	if (rc == -EBUSY) {
+		/*
+		 * WQ was full, so queue nvmewqeq to be sent after
+		 * WQE release CQE
+		 */
+		ctxp->flag |= LPFC_NVMET_DEFER_WQFULL;
+		wq = phba->sli4_hba.nvme_wq[rsp->hwqid];
+		pring = wq->pring;
+		spin_lock_irqsave(&pring->ring_lock, iflags);
+		list_add_tail(&nvmewqeq->list, &wq->wqfull_list);
+		wq->q_flag |= HBA_NVMET_WQFULL;
+		spin_unlock_irqrestore(&pring->ring_lock, iflags);
+		return 0;
+	}
+
 	/* Give back resources */
 	atomic_inc(&lpfc_nvmep->xmt_fcp_drop);
 	lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
@@ -851,6 +871,7 @@ lpfc_nvmet_xmt_fcp_abort(struct nvmet_fc_target_port *tgtport,
 	struct lpfc_nvmet_rcv_ctx *ctxp =
 		container_of(req, struct lpfc_nvmet_rcv_ctx, ctx.fcp_req);
 	struct lpfc_hba *phba = ctxp->phba;
+	struct lpfc_queue *wq;
 	unsigned long flags;
 
 	if (phba->pport->load_flag & FC_UNLOADING)
@@ -880,6 +901,14 @@ lpfc_nvmet_xmt_fcp_abort(struct nvmet_fc_target_port *tgtport,
 	}
 	ctxp->flag |= LPFC_NVMET_ABORT_OP;
 
+	if (ctxp->flag & LPFC_NVMET_DEFER_WQFULL) {
+		lpfc_nvmet_unsol_fcp_issue_abort(phba, ctxp, ctxp->sid,
+						 ctxp->oxid);
+		wq = phba->sli4_hba.nvme_wq[ctxp->wqeq->hba_wqidx];
+		lpfc_nvmet_wqfull_flush(phba, wq, ctxp);
+		return;
+	}
+
 	/* An state of LPFC_NVMET_STE_RCV means we have just received
 	 * the NVME command and have not started processing it.
 	 * (by issuing any IO WQEs on this exchange yet)
@@ -1435,16 +1464,103 @@ lpfc_nvmet_rcv_unsol_abort(struct lpfc_vport *vport,
 	return 0;
 }
 
+static void
+lpfc_nvmet_wqfull_flush(struct lpfc_hba *phba, struct lpfc_queue *wq,
+			struct lpfc_nvmet_rcv_ctx *ctxp)
+{
+	struct lpfc_sli_ring *pring;
+	struct lpfc_iocbq *nvmewqeq;
+	struct lpfc_iocbq *next_nvmewqeq;
+	unsigned long iflags;
+	struct lpfc_wcqe_complete wcqe;
+	struct lpfc_wcqe_complete *wcqep;
+
+	pring = wq->pring;
+	wcqep = &wcqe;
+
+	/* Fake an ABORT error code back to cmpl routine */
+	memset(wcqep, 0, sizeof(struct lpfc_wcqe_complete));
+	bf_set(lpfc_wcqe_c_status, wcqep, IOSTAT_LOCAL_REJECT);
+	wcqep->parameter = IOERR_ABORT_REQUESTED;
+
+	spin_lock_irqsave(&pring->ring_lock, iflags);
+	list_for_each_entry_safe(nvmewqeq, next_nvmewqeq,
+				 &wq->wqfull_list, list) {
+		if (ctxp) {
+			/* Checking for a specific IO to flush */
+			if (nvmewqeq->context2 == ctxp) {
+				list_del(&nvmewqeq->list);
+				spin_unlock_irqrestore(&pring->ring_lock,
+						       iflags);
+				lpfc_nvmet_xmt_fcp_op_cmp(phba, nvmewqeq,
+							  wcqep);
+				return;
+			}
+			continue;
+		} else {
+			/* Flush all IOs */
+			list_del(&nvmewqeq->list);
+			spin_unlock_irqrestore(&pring->ring_lock, iflags);
+			lpfc_nvmet_xmt_fcp_op_cmp(phba, nvmewqeq, wcqep);
+			spin_lock_irqsave(&pring->ring_lock, iflags);
+		}
+	}
+	if (!ctxp)
+		wq->q_flag &= ~HBA_NVMET_WQFULL;
+	spin_unlock_irqrestore(&pring->ring_lock, iflags);
+}
+
+void
+lpfc_nvmet_wqfull_process(struct lpfc_hba *phba,
+			  struct lpfc_queue *wq)
+{
+#if (IS_ENABLED(CONFIG_NVME_TARGET_FC))
+	struct lpfc_sli_ring *pring;
+	struct lpfc_iocbq *nvmewqeq;
+	unsigned long iflags;
+	int rc;
+
+	/*
+	 * Some WQE slots are available, so try to re-issue anything
+	 * on the WQ wqfull_list.
+	 */
+	pring = wq->pring;
+	spin_lock_irqsave(&pring->ring_lock, iflags);
+	while (!list_empty(&wq->wqfull_list)) {
+		list_remove_head(&wq->wqfull_list, nvmewqeq, struct lpfc_iocbq,
+				 list);
+		spin_unlock_irqrestore(&pring->ring_lock, iflags);
+		rc = lpfc_sli4_issue_wqe(phba, LPFC_FCP_RING, nvmewqeq);
+		spin_lock_irqsave(&pring->ring_lock, iflags);
+		if (rc == -EBUSY) {
+			/* WQ was full again, so put it back on the list */
+			list_add(&nvmewqeq->list, &wq->wqfull_list);
+			spin_unlock_irqrestore(&pring->ring_lock, iflags);
+			return;
+		}
+	}
+	wq->q_flag &= ~HBA_NVMET_WQFULL;
+	spin_unlock_irqrestore(&pring->ring_lock, iflags);
+
+#endif
+}
+
 void
 lpfc_nvmet_destroy_targetport(struct lpfc_hba *phba)
 {
 #if (IS_ENABLED(CONFIG_NVME_TARGET_FC))
 	struct lpfc_nvmet_tgtport *tgtp;
+	struct lpfc_queue *wq;
+	uint32_t qidx;
 
 	if (phba->nvmet_support == 0)
 		return;
 	if (phba->targetport) {
 		tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
+		for (qidx = 0; qidx < phba->cfg_nvme_io_channel; qidx++) {
+			wq = phba->sli4_hba.nvme_wq[qidx];
+			lpfc_nvmet_wqfull_flush(phba, wq, NULL);
+		}
 		init_completion(&tgtp->tport_unreg_done);
 		nvmet_fc_unregister_targetport(phba->targetport);
 		wait_for_completion_timeout(&tgtp->tport_unreg_done, 5);
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.h b/drivers/scsi/lpfc/lpfc_nvmet.h
index 5b32c9e4d4ef..354cce443c9f 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.h
+++ b/drivers/scsi/lpfc/lpfc_nvmet.h
@@ -132,6 +132,7 @@ struct lpfc_nvmet_rcv_ctx {
 #define LPFC_NVMET_CTX_RLS		0x8  /* ctx free requested */
 #define LPFC_NVMET_ABTS_RCV		0x10  /* ABTS received on exchange */
 #define LPFC_NVMET_DEFER_RCV_REPOST	0x20  /* repost to RQ on defer rcv */
+#define LPFC_NVMET_DEFER_WQFULL		0x40  /* Waiting on a free WQE */
 	struct rqb_dmabuf *rqb_buffer;
 	struct lpfc_nvmet_ctxbuf *ctxbuf;
 
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index d08d9b48f6b1..fbda2fbcbfec 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -13232,6 +13232,8 @@ lpfc_sli4_fp_handle_rel_wcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
 		if (childwq->queue_id == hba_wqid) {
 			lpfc_sli4_wq_release(childwq,
 					bf_get(lpfc_wcqe_r_wqe_index, wcqe));
+			if (childwq->q_flag & HBA_NVMET_WQFULL)
+				lpfc_nvmet_wqfull_process(phba, childwq);
 			wqid_matched = true;
 			break;
 		}
@@ -13950,6 +13952,7 @@ lpfc_sli4_queue_alloc(struct lpfc_hba *phba, uint32_t page_size,
 
 	INIT_LIST_HEAD(&queue->list);
 	INIT_LIST_HEAD(&queue->wq_list);
+	INIT_LIST_HEAD(&queue->wqfull_list);
 	INIT_LIST_HEAD(&queue->page_list);
 	INIT_LIST_HEAD(&queue->child_list);
 
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index a9af9980fc43..ac81bfa59278 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -145,6 +145,7 @@ struct lpfc_rqb {
 struct lpfc_queue {
 	struct list_head list;
 	struct list_head wq_list;
+	struct list_head wqfull_list;
 	enum lpfc_sli4_queue_type type;
 	enum lpfc_sli4_queue_subtype subtype;
 	struct lpfc_hba *phba;
@@ -173,9 +174,11 @@ struct lpfc_queue {
 #define LPFC_EXPANDED_PAGE_SIZE	16384
 #define LPFC_DEFAULT_PAGE_SIZE	4096
 	uint16_t chann;		/* IO channel this queue is associated with */
-	uint16_t db_format;
+	uint8_t db_format;
 #define LPFC_DB_RING_FORMAT	0x01
 #define LPFC_DB_LIST_FORMAT	0x02
+	uint8_t q_flag;
+#define HBA_NVMET_WQFULL	0x1 /* We hit WQ Full condition for NVMET */
 	void __iomem *db_regaddr;
 	/* For q stats */
 	uint32_t q_cnt_1;
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 06/19] lpfc: Fix PRLI handling when topology type changes
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (4 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 05/19] lpfc: Add WQ Full Logic for NVME Target James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:01   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 07/19] lpfc: Fix IO failure during hba reset testing with nvme io James Smart
                   ` (12 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

The lpfc driver does not discover a target when the topology
changes from switched-fabric to direct-connect. The target
rejects the PRLI from the initiator in direct-connect as the
driver is using the old S_ID from the switched topology.

The driver was inappropriately clearing the VP bit to register the
VPI, which is what is associated with the S_ID.

Fix by leaving the VP bit set (it was set earlier) and as the VFI
is being re-registered, set the UPDT bit.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_mbox.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
index 81fb92967b11..c32d4a323db2 100644
--- a/drivers/scsi/lpfc/lpfc_mbox.c
+++ b/drivers/scsi/lpfc/lpfc_mbox.c
@@ -2170,10 +2170,8 @@ lpfc_reg_vfi(struct lpfcMboxq *mbox, struct lpfc_vport *vport, dma_addr_t phys)
 	/* Only FC supports upd bit */
 	if ((phba->sli4_hba.lnk_info.lnk_tp == LPFC_LNK_TYPE_FC) &&
 	    (vport->fc_flag & FC_VFI_REGISTERED) &&
-	    (!phba->fc_topology_changed)) {
-		bf_set(lpfc_reg_vfi_vp, reg_vfi, 0);
+	    (!phba->fc_topology_changed))
 		bf_set(lpfc_reg_vfi_upd, reg_vfi, 1);
-	}
 
 	bf_set(lpfc_reg_vfi_bbcr, reg_vfi, 0);
 	bf_set(lpfc_reg_vfi_bbscn, reg_vfi, 0);
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 07/19] lpfc: Fix IO failure during hba reset testing with nvme io.
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (5 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 06/19] lpfc: Fix PRLI handling when topology type changes James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:06   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 08/19] lpfc: Fix RQ empty firmware trap James Smart
                   ` (11 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

A stress test repeatedly resetting the adapter while performing
io would eventually report I/O failures and missing nvme namespaces.

The driver was setting the nvmefc_fcp_req->private pointer to NULL
during the IO completion routine before upcalling done().
If the transport was also running an abort for that IO, the driver
would fail the abort with message 6140. Failing the abort is not
allowed by the nvme-fc transport, as it mandates that the io must be
returned back to the transport. As that does not happen, the transport
controller delete has an outstanding reference and can't complete
teardown.

Remove the NULL'ing of the private pointer in the nvmefc request.
The driver simply overwrites this value on each IO start.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_nvme.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index 81e3a4f10c3c..92643ffa79c3 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -804,7 +804,6 @@ lpfc_nvme_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
 	struct nvme_fc_cmd_iu *cp;
 	struct lpfc_nvme_rport *rport;
 	struct lpfc_nodelist *ndlp;
-	struct lpfc_nvme_fcpreq_priv *freqpriv;
 	struct lpfc_nvme_lport *lport;
 	unsigned long flags;
 	uint32_t code, status;
@@ -980,8 +979,6 @@ lpfc_nvme_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
 			phba->cpucheck_cmpl_io[lpfc_ncmd->cpu]++;
 	}
 #endif
-	freqpriv = nCmd->private;
-	freqpriv->nvme_buf = NULL;
 
 	/* NVME targets need completion held off until the abort exchange
 	 * completes unless the NVME Rport is getting unregistered.
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 08/19] lpfc: Fix RQ empty firmware trap
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (6 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 07/19] lpfc: Fix IO failure during hba reset testing with nvme io James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:07   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 09/19] lpfc: Allow set of maximum outstanding SCSI cmd limit for a target parameter James Smart
                   ` (10 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

When nvme target deferred receive logic waits for exchange
resources, the corresponding receive buffer is not replenished
with the hardware. This can result in a lack of asynchronous
receive buffer resources in the hardware, resulting in a
"2885 Port Status Event: ... error 1=0x52004a01 ..." message.

Correct by replenishing the buffer whenenver the deferred
logic kicks in.  Update corresponding debug messages and
statistics as well.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_attr.c  |  6 ++++++
 drivers/scsi/lpfc/lpfc_mem.c   |  8 ++++++--
 drivers/scsi/lpfc/lpfc_nvmet.c | 31 +++++++++++++++++++++----------
 drivers/scsi/lpfc/lpfc_nvmet.h |  7 +++++--
 drivers/scsi/lpfc/lpfc_sli.c   | 12 ++++++++++++
 5 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index d188fb565a32..91df2b4e9fce 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -259,6 +259,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
 				atomic_read(&tgtp->xmt_abort_rsp),
 				atomic_read(&tgtp->xmt_abort_rsp_error));
 
+		len += snprintf(buf + len, PAGE_SIZE - len,
+				"DELAY: ctx %08x  fod %08x wqfull %08x\n",
+				atomic_read(&tgtp->defer_ctx),
+				atomic_read(&tgtp->defer_fod),
+				atomic_read(&tgtp->defer_wqfull));
+
 		/* Calculate outstanding IOs */
 		tot = atomic_read(&tgtp->rcv_fcp_cmd_drop);
 		tot += atomic_read(&tgtp->xmt_fcp_release);
diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
index 56faeb049b4a..60078e61da5e 100644
--- a/drivers/scsi/lpfc/lpfc_mem.c
+++ b/drivers/scsi/lpfc/lpfc_mem.c
@@ -755,10 +755,14 @@ lpfc_rq_buf_free(struct lpfc_hba *phba, struct lpfc_dmabuf *mp)
 	if (rc < 0) {
 		(rqbp->rqb_free_buffer)(phba, rqb_entry);
 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-				"6409 Cannot post to RQ %d: %x %x\n",
+				"6409 Cannot post to HRQ %d: %x %x %x "
+				"DRQ %x %x\n",
 				rqb_entry->hrq->queue_id,
 				rqb_entry->hrq->host_index,
-				rqb_entry->hrq->hba_index);
+				rqb_entry->hrq->hba_index,
+				rqb_entry->hrq->entry_count,
+				rqb_entry->drq->host_index,
+				rqb_entry->drq->hba_index);
 	} else {
 		list_add_tail(&rqb_entry->hbuf.list, &rqbp->rqb_buffer_list);
 		rqbp->buffer_count++;
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 9c2acf90212c..0539585d32d4 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -270,8 +270,6 @@ lpfc_nvmet_ctxbuf_post(struct lpfc_hba *phba, struct lpfc_nvmet_ctxbuf *ctx_buf)
 					 "NVMET RCV BUSY: xri x%x sz %d "
 					 "from %06x\n",
 					 oxid, size, sid);
-			/* defer repost rcv buffer till .defer_rcv callback */
-			ctxp->flag &= ~LPFC_NVMET_DEFER_RCV_REPOST;
 			atomic_inc(&tgtp->rcv_fcp_cmd_out);
 			return;
 		}
@@ -837,6 +835,7 @@ lpfc_nvmet_xmt_fcp_op(struct nvmet_fc_target_port *tgtport,
 		list_add_tail(&nvmewqeq->list, &wq->wqfull_list);
 		wq->q_flag |= HBA_NVMET_WQFULL;
 		spin_unlock_irqrestore(&pring->ring_lock, iflags);
+		atomic_inc(&lpfc_nvmep->defer_wqfull);
 		return 0;
 	}
 
@@ -975,11 +974,9 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
 
 	tgtp = phba->targetport->private;
 	atomic_inc(&tgtp->rcv_fcp_cmd_defer);
-	if (ctxp->flag & LPFC_NVMET_DEFER_RCV_REPOST)
-		lpfc_rq_buf_free(phba, &nvmebuf->hbuf); /* repost */
-	else
-		nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
-	ctxp->flag &= ~LPFC_NVMET_DEFER_RCV_REPOST;
+
+	/* Free the nvmebuf since a new buffer already replaced it */
+	nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
 }
 
 static struct nvmet_fc_target_template lpfc_tgttemplate = {
@@ -1309,6 +1306,9 @@ lpfc_nvmet_create_targetport(struct lpfc_hba *phba)
 		atomic_set(&tgtp->xmt_abort_sol, 0);
 		atomic_set(&tgtp->xmt_abort_rsp, 0);
 		atomic_set(&tgtp->xmt_abort_rsp_error, 0);
+		atomic_set(&tgtp->defer_ctx, 0);
+		atomic_set(&tgtp->defer_fod, 0);
+		atomic_set(&tgtp->defer_wqfull, 0);
 	}
 	return error;
 }
@@ -1810,6 +1810,8 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
 	lpfc_nvmeio_data(phba, "NVMET FCP  RCV: xri x%x sz %d CPU %02x\n",
 			 oxid, size, smp_processor_id());
 
+	tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
+
 	if (!ctx_buf) {
 		/* Queue this NVME IO to process later */
 		spin_lock_irqsave(&phba->sli4_hba.nvmet_io_wait_lock, iflag);
@@ -1825,10 +1827,11 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
 		lpfc_post_rq_buffer(
 			phba, phba->sli4_hba.nvmet_mrq_hdr[qno],
 			phba->sli4_hba.nvmet_mrq_data[qno], 1, qno);
+
+		atomic_inc(&tgtp->defer_ctx);
 		return;
 	}
 
-	tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
 	payload = (uint32_t *)(nvmebuf->dbuf.virt);
 	sid = sli4_sid_from_fc_hdr(fc_hdr);
 
@@ -1892,12 +1895,20 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
 
 	/* Processing of FCP command is deferred */
 	if (rc == -EOVERFLOW) {
+		/*
+		 * Post a brand new DMA buffer to RQ and defer
+		 * freeing rcv buffer till .defer_rcv callback
+		 */
+		qno = nvmebuf->idx;
+		lpfc_post_rq_buffer(
+			phba, phba->sli4_hba.nvmet_mrq_hdr[qno],
+			phba->sli4_hba.nvmet_mrq_data[qno], 1, qno);
+
 		lpfc_nvmeio_data(phba,
 				 "NVMET RCV BUSY: xri x%x sz %d from %06x\n",
 				 oxid, size, sid);
-		/* defer reposting rcv buffer till .defer_rcv callback */
-		ctxp->flag |= LPFC_NVMET_DEFER_RCV_REPOST;
 		atomic_inc(&tgtp->rcv_fcp_cmd_out);
+		atomic_inc(&tgtp->defer_fod);
 		return;
 	}
 	ctxp->rqb_buffer = nvmebuf;
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.h b/drivers/scsi/lpfc/lpfc_nvmet.h
index 354cce443c9f..5da35de5ea45 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.h
+++ b/drivers/scsi/lpfc/lpfc_nvmet.h
@@ -72,7 +72,6 @@ struct lpfc_nvmet_tgtport {
 	atomic_t xmt_fcp_rsp_aborted;
 	atomic_t xmt_fcp_rsp_drop;
 
-
 	/* Stats counters - lpfc_nvmet_xmt_fcp_abort */
 	atomic_t xmt_fcp_xri_abort_cqe;
 	atomic_t xmt_fcp_abort;
@@ -81,6 +80,11 @@ struct lpfc_nvmet_tgtport {
 	atomic_t xmt_abort_unsol;
 	atomic_t xmt_abort_rsp;
 	atomic_t xmt_abort_rsp_error;
+
+	/* Stats counters - defer IO */
+	atomic_t defer_ctx;
+	atomic_t defer_fod;
+	atomic_t defer_wqfull;
 };
 
 struct lpfc_nvmet_ctx_info {
@@ -131,7 +135,6 @@ struct lpfc_nvmet_rcv_ctx {
 #define LPFC_NVMET_XBUSY		0x4  /* XB bit set on IO cmpl */
 #define LPFC_NVMET_CTX_RLS		0x8  /* ctx free requested */
 #define LPFC_NVMET_ABTS_RCV		0x10  /* ABTS received on exchange */
-#define LPFC_NVMET_DEFER_RCV_REPOST	0x20  /* repost to RQ on defer rcv */
 #define LPFC_NVMET_DEFER_WQFULL		0x40  /* Waiting on a free WQE */
 	struct rqb_dmabuf *rqb_buffer;
 	struct lpfc_nvmet_ctxbuf *ctxbuf;
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index fbda2fbcbfec..8b2919a553d6 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -6535,9 +6535,11 @@ lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
 	struct lpfc_rqe hrqe;
 	struct lpfc_rqe drqe;
 	struct lpfc_rqb *rqbp;
+	unsigned long flags;
 	struct rqb_dmabuf *rqb_buffer;
 	LIST_HEAD(rqb_buf_list);
 
+	spin_lock_irqsave(&phba->hbalock, flags);
 	rqbp = hrq->rqbp;
 	for (i = 0; i < count; i++) {
 		/* IF RQ is already full, don't bother */
@@ -6561,6 +6563,15 @@ lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
 		drqe.address_hi = putPaddrHigh(rqb_buffer->dbuf.phys);
 		rc = lpfc_sli4_rq_put(hrq, drq, &hrqe, &drqe);
 		if (rc < 0) {
+			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
+					"6421 Cannot post to HRQ %d: %x %x %x "
+					"DRQ %x %x\n",
+					hrq->queue_id,
+					hrq->host_index,
+					hrq->hba_index,
+					hrq->entry_count,
+					drq->host_index,
+					drq->hba_index);
 			rqbp->rqb_free_buffer(phba, rqb_buffer);
 		} else {
 			list_add_tail(&rqb_buffer->hbuf.list,
@@ -6568,6 +6579,7 @@ lpfc_post_rq_buffer(struct lpfc_hba *phba, struct lpfc_queue *hrq,
 			rqbp->buffer_count++;
 		}
 	}
+	spin_unlock_irqrestore(&phba->hbalock, flags);
 	return 1;
 }
 
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 09/19] lpfc: Allow set of maximum outstanding SCSI cmd limit for a target parameter
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (7 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 08/19] lpfc: Fix RQ empty firmware trap James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:08   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 10/19] lpfc: Fix soft lockup in lpfc worker thread during LIP testing James Smart
                   ` (9 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Make the attribute writeable.
Remove the ramp up to logic as its unnecessary, simply set depth.
Add debug message if depth changed, possibly reducing limit, yet
our outstanding count has yet to catch up with it.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_attr.c |  4 ++--
 drivers/scsi/lpfc/lpfc_scsi.c | 39 ++++++++++++++++++++++++++++-----------
 2 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 91df2b4e9fce..d8064e3ea0ba 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -3471,8 +3471,8 @@ LPFC_VPORT_ATTR_R(lun_queue_depth, 30, 1, 512,
 # tgt_queue_depth:  This parameter is used to limit the number of outstanding
 # commands per target port. Value range is [10,65535]. Default value is 65535.
 */
-LPFC_VPORT_ATTR_R(tgt_queue_depth, 65535, 10, 65535,
-		  "Max number of FCP commands we can queue to a specific target port");
+LPFC_VPORT_ATTR_RW(tgt_queue_depth, 65535, 10, 65535,
+		   "Max number of FCP commands we can queue to a specific target port");
 
 /*
 # hba_queue_depth:  This parameter is used to limit the number of outstanding
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index c0cdaef4db24..dcc86936e6fc 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -3926,7 +3926,6 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
 	struct lpfc_rport_data *rdata = lpfc_cmd->rdata;
 	struct lpfc_nodelist *pnode = rdata->pnode;
 	struct scsi_cmnd *cmd;
-	int depth;
 	unsigned long flags;
 	struct lpfc_fast_path_event *fast_path_evt;
 	struct Scsi_Host *shost;
@@ -4132,16 +4131,11 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
 		}
 		spin_unlock_irqrestore(shost->host_lock, flags);
 	} else if (pnode && NLP_CHK_NODE_ACT(pnode)) {
-		if ((pnode->cmd_qdepth < vport->cfg_tgt_queue_depth) &&
-		   time_after(jiffies, pnode->last_change_time +
+		if ((pnode->cmd_qdepth != vport->cfg_tgt_queue_depth) &&
+		    time_after(jiffies, pnode->last_change_time +
 			      msecs_to_jiffies(LPFC_TGTQ_INTERVAL))) {
 			spin_lock_irqsave(shost->host_lock, flags);
-			depth = pnode->cmd_qdepth * LPFC_TGTQ_RAMPUP_PCENT
-				/ 100;
-			depth = depth ? depth : 1;
-			pnode->cmd_qdepth += depth;
-			if (pnode->cmd_qdepth > vport->cfg_tgt_queue_depth)
-				pnode->cmd_qdepth = vport->cfg_tgt_queue_depth;
+			pnode->cmd_qdepth = vport->cfg_tgt_queue_depth;
 			pnode->last_change_time = jiffies;
 			spin_unlock_irqrestore(shost->host_lock, flags);
 		}
@@ -4564,9 +4558,32 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 	 */
 	if (!ndlp || !NLP_CHK_NODE_ACT(ndlp))
 		goto out_tgt_busy;
-	if (atomic_read(&ndlp->cmd_pending) >= ndlp->cmd_qdepth)
+	if (atomic_read(&ndlp->cmd_pending) >= ndlp->cmd_qdepth) {
+		lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP_ERROR,
+				 "3377 Target Queue Full, scsi Id:%d Qdepth:%d"
+				 " Pending command:%d"
+				 " WWNN:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x, "
+				 " WWPN:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
+				 ndlp->nlp_sid, ndlp->cmd_qdepth,
+				 atomic_read(&ndlp->cmd_pending),
+				 ndlp->nlp_nodename.u.wwn[0],
+				 ndlp->nlp_nodename.u.wwn[1],
+				 ndlp->nlp_nodename.u.wwn[2],
+				 ndlp->nlp_nodename.u.wwn[3],
+				 ndlp->nlp_nodename.u.wwn[4],
+				 ndlp->nlp_nodename.u.wwn[5],
+				 ndlp->nlp_nodename.u.wwn[6],
+				 ndlp->nlp_nodename.u.wwn[7],
+				 ndlp->nlp_portname.u.wwn[0],
+				 ndlp->nlp_portname.u.wwn[1],
+				 ndlp->nlp_portname.u.wwn[2],
+				 ndlp->nlp_portname.u.wwn[3],
+				 ndlp->nlp_portname.u.wwn[4],
+				 ndlp->nlp_portname.u.wwn[5],
+				 ndlp->nlp_portname.u.wwn[6],
+				 ndlp->nlp_portname.u.wwn[7]);
 		goto out_tgt_busy;
-
+	}
 	lpfc_cmd = lpfc_get_scsi_buf(phba, ndlp);
 	if (lpfc_cmd == NULL) {
 		lpfc_rampdown_queue_depth(phba);
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 10/19] lpfc: Fix soft lockup in lpfc worker thread during LIP testing
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (8 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 09/19] lpfc: Allow set of maximum outstanding SCSI cmd limit for a target parameter James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:13   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 11/19] lpfc: Fix issue_lip if link is disabled James Smart
                   ` (8 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

During link bounce testing in a point-to-point topology, the
host may enter a soft lockup on the lpfc_worker thread:
    Call Trace:
     lpfc_work_done+0x1f3/0x1390 [lpfc]
     lpfc_do_work+0x16f/0x180 [lpfc]
     kthread+0xc7/0xe0
     ret_from_fork+0x3f/0x70

The driver was simultaneously setting a combination of flags
that caused lpfc_do_work()to effectively spin between slow path
work and new event data, causing the lockup.

Ensure in the typical wq completions, that new event data flags
are set if the slow path flag is running. The slow path will
eventually reschedule the wq handling.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_hbadisc.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index b159a5c4e388..9265906d956e 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -696,8 +696,9 @@ lpfc_work_done(struct lpfc_hba *phba)
 		      phba->hba_flag & HBA_SP_QUEUE_EVT)) {
 		if (pring->flag & LPFC_STOP_IOCB_EVENT) {
 			pring->flag |= LPFC_DEFERRED_RING_EVENT;
-			/* Set the lpfc data pending flag */
-			set_bit(LPFC_DATA_READY, &phba->data_flags);
+			/* Preserve legacy behavior. */
+			if (!(phba->hba_flag & HBA_SP_QUEUE_EVT))
+				set_bit(LPFC_DATA_READY, &phba->data_flags);
 		} else {
 			if (phba->link_state >= LPFC_LINK_UP ||
 			    phba->link_flag & LS_MDS_LOOPBACK) {
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 11/19] lpfc: Fix issue_lip if link is disabled
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (9 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 10/19] lpfc: Fix soft lockup in lpfc worker thread during LIP testing James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:13   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 12/19] lpfc: Indicate CONF support in NVMe PRLI James Smart
                   ` (7 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

The driver ignored checks on whether the link should be
kept administratively down after a link bounce. Correct the
checks.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_attr.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index d8064e3ea0ba..b79dad7b8278 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -911,7 +911,12 @@ lpfc_issue_lip(struct Scsi_Host *shost)
 	LPFC_MBOXQ_t *pmboxq;
 	int mbxstatus = MBXERR_ERROR;
 
+	/*
+	 * If the link is offline, disabled or BLOCK_MGMT_IO
+	 * it doesn't make any sense to allow issue_lip
+	 */
 	if ((vport->fc_flag & FC_OFFLINE_MODE) ||
+	    (phba->hba_flag & LINK_DISABLED) ||
 	    (phba->sli.sli_flag & LPFC_BLOCK_MGMT_IO))
 		return -EPERM;
 
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 12/19] lpfc: Indicate CONF support in NVMe PRLI
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (10 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 11/19] lpfc: Fix issue_lip if link is disabled James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:28   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 13/19] lpfc: Fix SCSI io host reset causing kernel crash James Smart
                   ` (6 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Revise the NVME PRLI to indicate CONF support.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_els.c       | 3 ++-
 drivers/scsi/lpfc/lpfc_hw4.h       | 6 +++---
 drivers/scsi/lpfc/lpfc_nportdisc.c | 3 ---
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 234c7c015982..404e1af5e2ab 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -2293,10 +2293,11 @@ lpfc_issue_els_prli(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 		if (phba->nvmet_support) {
 			bf_set(prli_tgt, npr_nvme, 1);
 			bf_set(prli_disc, npr_nvme, 1);
-
 		} else {
 			bf_set(prli_init, npr_nvme, 1);
+			bf_set(prli_conf, npr_nvme, 1);
 		}
+
 		npr_nvme->word1 = cpu_to_be32(npr_nvme->word1);
 		npr_nvme->word4 = cpu_to_be32(npr_nvme->word4);
 		elsiocb->iocb_flag |= LPFC_PRLI_NVME_REQ;
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index ef469129fb71..7c3afc3d3121 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -4346,9 +4346,9 @@ struct lpfc_nvme_prli {
 #define prli_init_SHIFT                 5
 #define prli_init_MASK                  0x00000001
 #define prli_init_WORD                  word4
-#define prli_recov_SHIFT                8
-#define prli_recov_MASK                 0x00000001
-#define prli_recov_WORD                 word4
+#define prli_conf_SHIFT                 7
+#define prli_conf_MASK                  0x00000001
+#define prli_conf_WORD                  word4
 	uint32_t word5;
 #define prli_fb_sz_SHIFT                0
 #define prli_fb_sz_MASK                 0x0000ffff
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index d841aa42f607..bbf1e1342b09 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -2011,9 +2011,6 @@ lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 			}
 		}
 
-		if (bf_get_be32(prli_recov, nvpr))
-			ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
-
 		lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
 				 "6029 NVME PRLI Cmpl w1 x%08x "
 				 "w4 x%08x w5 x%08x flag x%x, "
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 13/19] lpfc: Fix SCSI io host reset causing kernel crash
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (11 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 12/19] lpfc: Indicate CONF support in NVMe PRLI James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:29   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 14/19] lpfc: Validate adapter support for SRIU option James Smart
                   ` (5 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

During SCSI error handling escalation to host reset, the SCSI io
routines were moved off the txcmplq, but the individual io's
ON_CMPLQ flag wasn't cleared.  Thus, a background thread saw the
io and attempted to access it as if on the txcmplq.

Clear the flag upon removal.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_init.c |  4 ++++
 drivers/scsi/lpfc/lpfc_sli.c  | 13 ++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 851d4e889042..7fc2db968379 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -958,6 +958,7 @@ lpfc_hba_clean_txcmplq(struct lpfc_hba *phba)
 	struct lpfc_sli_ring *pring;
 	LIST_HEAD(completions);
 	int i;
+	struct lpfc_iocbq *piocb, *next_iocb;
 
 	if (phba->sli_rev != LPFC_SLI_REV4) {
 		for (i = 0; i < psli->num_rings; i++) {
@@ -983,6 +984,9 @@ lpfc_hba_clean_txcmplq(struct lpfc_hba *phba)
 		if (!pring)
 			continue;
 		spin_lock_irq(&pring->ring_lock);
+		list_for_each_entry_safe(piocb, next_iocb,
+					 &pring->txcmplq, list)
+			piocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
 		list_splice_init(&pring->txcmplq, &completions);
 		pring->txcmplq_cnt = 0;
 		spin_unlock_irq(&pring->ring_lock);
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 8b2919a553d6..d597e15a1974 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -3778,6 +3778,7 @@ lpfc_sli_flush_fcp_rings(struct lpfc_hba *phba)
 	struct lpfc_sli *psli = &phba->sli;
 	struct lpfc_sli_ring  *pring;
 	uint32_t i;
+	struct lpfc_iocbq *piocb, *next_iocb;
 
 	spin_lock_irq(&phba->hbalock);
 	/* Indicate the I/O queues are flushed */
@@ -3792,6 +3793,9 @@ lpfc_sli_flush_fcp_rings(struct lpfc_hba *phba)
 			spin_lock_irq(&pring->ring_lock);
 			/* Retrieve everything on txq */
 			list_splice_init(&pring->txq, &txq);
+			list_for_each_entry_safe(piocb, next_iocb,
+						 &pring->txcmplq, list)
+				piocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
 			/* Retrieve everything on the txcmplq */
 			list_splice_init(&pring->txcmplq, &txcmplq);
 			pring->txq_cnt = 0;
@@ -3813,6 +3817,9 @@ lpfc_sli_flush_fcp_rings(struct lpfc_hba *phba)
 		spin_lock_irq(&phba->hbalock);
 		/* Retrieve everything on txq */
 		list_splice_init(&pring->txq, &txq);
+		list_for_each_entry_safe(piocb, next_iocb,
+					 &pring->txcmplq, list)
+			piocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
 		/* Retrieve everything on the txcmplq */
 		list_splice_init(&pring->txcmplq, &txcmplq);
 		pring->txq_cnt = 0;
@@ -3844,6 +3851,7 @@ lpfc_sli_flush_nvme_rings(struct lpfc_hba *phba)
 	LIST_HEAD(txcmplq);
 	struct lpfc_sli_ring  *pring;
 	uint32_t i;
+	struct lpfc_iocbq *piocb, *next_iocb;
 
 	if (phba->sli_rev < LPFC_SLI_REV4)
 		return;
@@ -3860,8 +3868,11 @@ lpfc_sli_flush_nvme_rings(struct lpfc_hba *phba)
 	for (i = 0; i < phba->cfg_nvme_io_channel; i++) {
 		pring = phba->sli4_hba.nvme_wq[i]->pring;
 
-		/* Retrieve everything on the txcmplq */
 		spin_lock_irq(&pring->ring_lock);
+		list_for_each_entry_safe(piocb, next_iocb,
+					 &pring->txcmplq, list)
+			piocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
+		/* Retrieve everything on the txcmplq */
 		list_splice_init(&pring->txcmplq, &txcmplq);
 		pring->txcmplq_cnt = 0;
 		spin_unlock_irq(&pring->ring_lock);
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 14/19] lpfc: Validate adapter support for SRIU option
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (12 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 13/19] lpfc: Fix SCSI io host reset causing kernel crash James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:30   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 15/19] lpfc: Fix header inclusion in lpfc_nvmet James Smart
                   ` (4 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

When using the special option to suppress the response iu, ensure
the adapter fully supports the feature by checking feature flags
from the adapter.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_hw4.h  |  3 +++
 drivers/scsi/lpfc/lpfc_init.c | 13 ++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 7c3afc3d3121..52fe28ae50fa 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -3293,6 +3293,9 @@ struct lpfc_sli4_parameters {
 #define cfg_eqdr_SHIFT				8
 #define cfg_eqdr_MASK				0x00000001
 #define cfg_eqdr_WORD				word19
+#define cfg_nosr_SHIFT				9
+#define cfg_nosr_MASK				0x00000001
+#define cfg_nosr_WORD				word19
 #define LPFC_NODELAY_MAX_IO		32
 };
 
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 7fc2db968379..895b1da784ee 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -10473,8 +10473,19 @@ lpfc_get_sli4_parameters(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
 		phba->cfg_enable_fc4_type = LPFC_ENABLE_FCP;
 	}
 
-	if (bf_get(cfg_xib, mbx_sli4_parameters) && phba->cfg_suppress_rsp)
+	/*
+	 * To support Suppress Response feature we must satisfy 3 conditions.
+	 * lpfc_suppress_rsp module parameter must be set (default).
+	 * In SLI4-Parameters Descriptor:
+	 * Extended Inline Buffers (XIB) must be supported.
+	 * Suppress Response IU Not Supported (SRIUNS) must NOT be supported
+	 * (double negative).
+	 */
+	if (phba->cfg_suppress_rsp && bf_get(cfg_xib, mbx_sli4_parameters) &&
+	    !(bf_get(cfg_nosr, mbx_sli4_parameters)))
 		phba->sli.sli_flag |= LPFC_SLI_SUPPRESS_RSP;
+	else
+		phba->cfg_suppress_rsp = 0;
 
 	if (bf_get(cfg_eqdr, mbx_sli4_parameters))
 		phba->sli.sli_flag |= LPFC_SLI_USE_EQDR;
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 15/19] lpfc: Fix header inclusion in lpfc_nvmet
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (13 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 14/19] lpfc: Validate adapter support for SRIU option James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:30   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 16/19] lpfc: Treat SCSI Write operation Underruns as an error James Smart
                   ` (3 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

The driver was inappropriately pulling in the nvme host's
nvme.h header. What it really needed was the standard
<linux/nvme.h> header.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_nvmet.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 0539585d32d4..f8863c51ba20 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -36,7 +36,7 @@
 #include <scsi/scsi_transport_fc.h>
 #include <scsi/fc/fc_fs.h>
 
-#include <../drivers/nvme/host/nvme.h>
+#include <linux/nvme.h>
 #include <linux/nvme-fc-driver.h>
 #include <linux/nvme-fc.h>
 
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 16/19] lpfc: Treat SCSI Write operation Underruns as an error
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (14 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 15/19] lpfc: Fix header inclusion in lpfc_nvmet James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:33   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 17/19] lpfc: Fix nonrecovery of NVME controller after cable swap James Smart
                   ` (2 subsequent siblings)
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Currently, write underruns (mismatch of amount transferred vs scsi
status and its residual) detected by the adapter are not being
flagged as an error. Its expected the target controls the data
transfer and would appropriately set the RSP values.  Only read
underruns are treated as errors.

Revise the SCSI error handling to treat write underruns as an
error as well.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_scsi.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index dcc86936e6fc..10c2dc0cf1fa 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -3772,20 +3772,18 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
 		scsi_set_resid(cmnd, be32_to_cpu(fcprsp->rspResId));
 
 		lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP_UNDER,
-				 "9025 FCP Read Underrun, expected %d, "
+				 "9025 FCP Underrun, expected %d, "
 				 "residual %d Data: x%x x%x x%x\n",
 				 fcpDl,
 				 scsi_get_resid(cmnd), fcpi_parm, cmnd->cmnd[0],
 				 cmnd->underflow);
 
 		/*
-		 * If there is an under run check if under run reported by
+		 * If there is an under run, check if under run reported by
 		 * storage array is same as the under run reported by HBA.
 		 * If this is not same, there is a dropped frame.
 		 */
-		if ((cmnd->sc_data_direction == DMA_FROM_DEVICE) &&
-			fcpi_parm &&
-			(scsi_get_resid(cmnd) != fcpi_parm)) {
+		if (fcpi_parm && (scsi_get_resid(cmnd) != fcpi_parm)) {
 			lpfc_printf_vlog(vport, KERN_WARNING,
 					 LOG_FCP | LOG_FCP_ERROR,
 					 "9026 FCP Read Check Error "
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 17/19] lpfc: Fix nonrecovery of NVME controller after cable swap.
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (15 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 16/19] lpfc: Treat SCSI Write operation Underruns as an error James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:34   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 18/19] lpfc: update driver version to 11.4.0.7 James Smart
  2018-01-24 22:45 ` [PATCH 19/19] lpfc: Update modified files for 2018 Copyright James Smart
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

In a test that is doing large numbers of cable swaps on the target,
the nvme controllers wouldn't reconnect.

During the cable swaps, the targets n_port_id would change. This
information was passed to the nvme-fc transport, in the new remoteport
registration. However, the nvme-fc transport didn't update the n_port_id
value in the remoteport struct when it reused an existing structure.
Later, when a new association was attempted on the remoteport, the
driver's NVME LS routine would use the stale n_port_id from the remoteport
struct to address the LS. As the device is no longer at that address,
the LS would go into never never land.

Separately, the nvme-fc transport will be corrected to update the
n_port_id value on a re-registration.

However, for now, there's no reason to use the transports values.
The private pointer points to the drivers node structure and the
node structure is up to date. Therefore, revise the LS routine to
use the drivers data structures for the LS. Augmented the debug
message for better debugging in the future.

Also removed a duplicate if check that seems to have slipped in.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_nvme.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index 92643ffa79c3..fc6d85f0bfcf 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -241,10 +241,11 @@ lpfc_nvme_cmpl_gen_req(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
 	ndlp = (struct lpfc_nodelist *)cmdwqe->context1;
 	lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
 			 "6047 nvme cmpl Enter "
-			 "Data %p DID %x Xri: %x status %x cmd:%p lsreg:%p "
-			 "bmp:%p ndlp:%p\n",
+			 "Data %p DID %x Xri: %x status %x reason x%x cmd:%p "
+			 "lsreg:%p bmp:%p ndlp:%p\n",
 			 pnvme_lsreq, ndlp ? ndlp->nlp_DID : 0,
 			 cmdwqe->sli4_xritag, status,
+			 (wcqe->parameter & 0xffff),
 			 cmdwqe, pnvme_lsreq, cmdwqe->context3, ndlp);
 
 	lpfc_nvmeio_data(phba, "NVME LS  CMPL: xri x%x stat x%x parm x%x\n",
@@ -419,6 +420,7 @@ lpfc_nvme_ls_req(struct nvme_fc_local_port *pnvme_lport,
 {
 	int ret = 0;
 	struct lpfc_nvme_lport *lport;
+	struct lpfc_nvme_rport *rport;
 	struct lpfc_vport *vport;
 	struct lpfc_nodelist *ndlp;
 	struct ulp_bde64 *bpl;
@@ -437,19 +439,18 @@ lpfc_nvme_ls_req(struct nvme_fc_local_port *pnvme_lport,
 	 */
 
 	lport = (struct lpfc_nvme_lport *)pnvme_lport->private;
+	rport = (struct lpfc_nvme_rport *)pnvme_rport->private;
 	vport = lport->vport;
 
 	if (vport->load_flag & FC_UNLOADING)
 		return -ENODEV;
 
-	if (vport->load_flag & FC_UNLOADING)
-		return -ENODEV;
-
-	ndlp = lpfc_findnode_did(vport, pnvme_rport->port_id);
+	/* Need the ndlp.  It is stored in the driver's rport. */
+	ndlp = rport->ndlp;
 	if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) {
 		lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE | LOG_NVME_IOERR,
-				 "6051 DID x%06x not an active rport.\n",
-				 pnvme_rport->port_id);
+				 "6051 Remoteport %p, rport has invalid ndlp. "
+				 "Failing LS Req\n", pnvme_rport);
 		return -ENODEV;
 	}
 
@@ -500,8 +501,9 @@ lpfc_nvme_ls_req(struct nvme_fc_local_port *pnvme_lport,
 
 	/* Expand print to include key fields. */
 	lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
-			 "6149 ENTER.  lport %p, rport %p lsreq%p rqstlen:%d "
-			 "rsplen:%d %pad %pad\n",
+			 "6149 Issue LS Req to DID 0x%06x lport %p, rport %p "
+			 "lsreq%p rqstlen:%d rsplen:%d %pad %pad\n",
+			 ndlp->nlp_DID,
 			 pnvme_lport, pnvme_rport,
 			 pnvme_lsreq, pnvme_lsreq->rqstlen,
 			 pnvme_lsreq->rsplen, &pnvme_lsreq->rqstdma,
@@ -517,7 +519,7 @@ lpfc_nvme_ls_req(struct nvme_fc_local_port *pnvme_lport,
 				ndlp, 2, 30, 0);
 	if (ret != WQE_SUCCESS) {
 		atomic_inc(&lport->xmt_ls_err);
-		lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
+		lpfc_printf_vlog(vport, KERN_ERR, LOG_NVME_DISC,
 				 "6052 EXIT. issue ls wqe failed lport %p, "
 				 "rport %p lsreq%p Status %x DID %x\n",
 				 pnvme_lport, pnvme_rport, pnvme_lsreq,
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 18/19] lpfc: update driver version to 11.4.0.7
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (16 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 17/19] lpfc: Fix nonrecovery of NVME controller after cable swap James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:34   ` Hannes Reinecke
  2018-01-24 22:45 ` [PATCH 19/19] lpfc: Update modified files for 2018 Copyright James Smart
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Update the driver version to 11.4.0.7

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_version.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
index c232bf0e8998..6f4092cb903e 100644
--- a/drivers/scsi/lpfc/lpfc_version.h
+++ b/drivers/scsi/lpfc/lpfc_version.h
@@ -20,7 +20,7 @@
  * included with this package.                                     *
  *******************************************************************/
 
-#define LPFC_DRIVER_VERSION "11.4.0.6"
+#define LPFC_DRIVER_VERSION "11.4.0.7"
 #define LPFC_DRIVER_NAME		"lpfc"
 
 /* Used for SLI 2/3 */
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* [PATCH 19/19] lpfc: Update modified files for 2018 Copyright
  2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
                   ` (17 preceding siblings ...)
  2018-01-24 22:45 ` [PATCH 18/19] lpfc: update driver version to 11.4.0.7 James Smart
@ 2018-01-24 22:45 ` James Smart
  2018-01-29  8:35   ` Hannes Reinecke
  18 siblings, 1 reply; 39+ messages in thread
From: James Smart @ 2018-01-24 22:45 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Dick Kennedy, James Smart

Updated Copyright in files updated 11.4.0.7

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc.h           | 2 +-
 drivers/scsi/lpfc/lpfc_attr.c      | 2 +-
 drivers/scsi/lpfc/lpfc_crtn.h      | 2 +-
 drivers/scsi/lpfc/lpfc_els.c       | 2 +-
 drivers/scsi/lpfc/lpfc_hbadisc.c   | 2 +-
 drivers/scsi/lpfc/lpfc_hw4.h       | 2 +-
 drivers/scsi/lpfc/lpfc_init.c      | 2 +-
 drivers/scsi/lpfc/lpfc_mbox.c      | 2 +-
 drivers/scsi/lpfc/lpfc_mem.c       | 2 +-
 drivers/scsi/lpfc/lpfc_nportdisc.c | 4 ++--
 drivers/scsi/lpfc/lpfc_nvme.c      | 2 +-
 drivers/scsi/lpfc/lpfc_nvmet.c     | 2 +-
 drivers/scsi/lpfc/lpfc_nvmet.h     | 2 +-
 drivers/scsi/lpfc/lpfc_scsi.c      | 2 +-
 drivers/scsi/lpfc/lpfc_sli.c       | 3 +--
 drivers/scsi/lpfc/lpfc_sli4.h      | 2 +-
 drivers/scsi/lpfc/lpfc_version.h   | 2 +-
 17 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index d042f9118e3b..9698b9635058 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index b79dad7b8278..70bd25666243 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index 3ecf50df93f4..14a86b5b51e4 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 404e1af5e2ab..ba896554a14f 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 9265906d956e..f5bbac3cadbb 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 52fe28ae50fa..8685d26e6929 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2009-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 895b1da784ee..04a77c308836 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
index c32d4a323db2..7313ceb0f23b 100644
--- a/drivers/scsi/lpfc/lpfc_mbox.c
+++ b/drivers/scsi/lpfc/lpfc_mbox.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
index 60078e61da5e..41361662ff08 100644
--- a/drivers/scsi/lpfc/lpfc_mem.c
+++ b/drivers/scsi/lpfc/lpfc_mem.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2014 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index bbf1e1342b09..b63179d895e2 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -1,7 +1,7 @@
- /*******************************************************************
+/*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index fc6d85f0bfcf..527e63c1f1ac 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index f8863c51ba20..5b9f456a9f5e 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channsel Host Bus Adapters.                               *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.h b/drivers/scsi/lpfc/lpfc_nvmet.h
index 5da35de5ea45..c1bcef3f103c 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.h
+++ b/drivers/scsi/lpfc/lpfc_nvmet.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index 10c2dc0cf1fa..c595046a521b 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index d597e15a1974..e97d080e9f65 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -1,8 +1,7 @@
-
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index ac81bfa59278..4545c1fdcb55 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2009-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
index 6f4092cb903e..3b04ecb17a38 100644
--- a/drivers/scsi/lpfc/lpfc_version.h
+++ b/drivers/scsi/lpfc/lpfc_version.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
+ * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
  * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
-- 
2.13.1

^ permalink raw reply related	[flat|nested] 39+ messages in thread

* Re: [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs
  2018-01-24 22:45 ` [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs James Smart
@ 2018-01-29  7:50   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  7:50 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> The driver controls when the hardware sends completions that
> communicate consumption of elements from the WQ. This is done by
> setting a WQEC bit on a WQE.
> 
> The current driver sets it on every Nth WQE posting. However, the
> driver isn't clearing the bit if the WQE is reused. Thus, if the
> queue depth isn't evenly divisible by N, with enough time, it can
> be set on every element, creating a lot of overhead and risking
> CQ full conditions.
> 
> Correct by clearing the bit when not setting it on an Nth element.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_sli.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
> index 5f5528a12308..149f21f53b13 100644
> --- a/drivers/scsi/lpfc/lpfc_sli.c
> +++ b/drivers/scsi/lpfc/lpfc_sli.c
> @@ -129,6 +129,8 @@ lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
>  	/* set consumption flag every once in a while */
>  	if (!((q->host_index + 1) % q->entry_repost))
>  		bf_set(wqe_wqec, &wqe->generic.wqe_com, 1);
> +	else
> +		bf_set(wqe_wqec, &wqe->generic.wqe_com, 0);
>  	if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED)
>  		bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id);
>  	lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size);
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 02/19] lpfc: Increase CQ and WQ sizes for SCSI
  2018-01-24 22:45 ` [PATCH 02/19] lpfc: Increase CQ and WQ sizes for SCSI James Smart
@ 2018-01-29  7:54   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  7:54 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Increased CQ and WQ sizes for SCSI FCP, matching those used
> for NVMe development.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc.h      |  1 +
>  drivers/scsi/lpfc/lpfc_hw4.h  |  3 +++
>  drivers/scsi/lpfc/lpfc_init.c | 30 ++++++++++++++++++++++--------
>  drivers/scsi/lpfc/lpfc_sli.c  |  3 ++-
>  drivers/scsi/lpfc/lpfc_sli4.h |  5 +++++
>  5 files changed, 33 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
> index 61fb46da05d4..d042f9118e3b 100644
> --- a/drivers/scsi/lpfc/lpfc.h
> +++ b/drivers/scsi/lpfc/lpfc.h
> @@ -760,6 +760,7 @@ struct lpfc_hba {
>  	uint8_t  mds_diags_support;
>  	uint32_t initial_imax;
>  	uint8_t  bbcredit_support;
> +	uint8_t  enab_exp_wqcq_pages;
>  
>  	/* HBA Config Parameters */
>  	uint32_t cfg_ack0;
> diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
> index 73c2f6971d2b..ef469129fb71 100644
> --- a/drivers/scsi/lpfc/lpfc_hw4.h
> +++ b/drivers/scsi/lpfc/lpfc_hw4.h
> @@ -3212,6 +3212,9 @@ struct lpfc_sli4_parameters {
>  #define cfg_cqv_SHIFT				14
>  #define cfg_cqv_MASK				0x00000003
>  #define cfg_cqv_WORD				word4
> +#define cfg_cqpsize_SHIFT			16
> +#define cfg_cqpsize_MASK			0x000000ff
> +#define cfg_cqpsize_WORD			word4
>  	uint32_t word5;
>  	uint32_t word6;
>  #define cfg_mqv_SHIFT				14
> diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
> index f539c554588c..5b96bf0d3331 100644
> --- a/drivers/scsi/lpfc/lpfc_init.c
> +++ b/drivers/scsi/lpfc/lpfc_init.c
> @@ -8011,9 +8011,10 @@ static int
>  lpfc_alloc_fcp_wq_cq(struct lpfc_hba *phba, int wqidx)
>  {
>  	struct lpfc_queue *qdesc;
> +	uint32_t wqesize;
>  
>  	/* Create Fast Path FCP CQs */
> -	if (phba->fcp_embed_io)
> +	if (phba->enab_exp_wqcq_pages)
>  		/* Increase the CQ size when WQEs contain an embedded cdb */
>  		qdesc = lpfc_sli4_queue_alloc(phba, LPFC_EXPANDED_PAGE_SIZE,
>  					      phba->sli4_hba.cq_esize,
> @@ -8031,15 +8032,18 @@ lpfc_alloc_fcp_wq_cq(struct lpfc_hba *phba, int wqidx)
>  	phba->sli4_hba.fcp_cq[wqidx] = qdesc;
>  
>  	/* Create Fast Path FCP WQs */
> -	if (phba->fcp_embed_io)
>  		/* Increase the WQ size when WQEs contain an embedded cdb */

Wrong indentation after patching.

> +	if (phba->enab_exp_wqcq_pages) {
> +		wqesize = (phba->fcp_embed_io) ?
> +			LPFC_WQE128_SIZE : phba->sli4_hba.wq_esize;
>  		qdesc = lpfc_sli4_queue_alloc(phba, LPFC_EXPANDED_PAGE_SIZE,
> -					      LPFC_WQE128_SIZE,
> +					      wqesize,
>  					      LPFC_WQE_EXP_COUNT);
> -	else
> +	} else {
>  		qdesc = lpfc_sli4_queue_alloc(phba, LPFC_DEFAULT_PAGE_SIZE,
>  					      phba->sli4_hba.wq_esize,
>  					      phba->sli4_hba.wq_ecount);
> +	}

No need for braces here.

>  	if (!qdesc) {
>  		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
>  				"0503 Failed allocate fast-path FCP WQ (%d)\n",
> @@ -10485,6 +10489,12 @@ lpfc_get_sli4_parameters(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
>  	else
>  		phba->fcp_embed_io = 0;
>  
> +	if ((bf_get(cfg_cqpsize, mbx_sli4_parameters) & LPFC_CQ_16K_PAGE_SZ) &&
> +	    (bf_get(cfg_wqpsize, mbx_sli4_parameters) & LPFC_WQ_16K_PAGE_SZ) &&
> +	    (sli4_params->wqsize & LPFC_WQ_SZ128_SUPPORT))
> +		phba->enab_exp_wqcq_pages = 1;
> +	else
> +		phba->enab_exp_wqcq_pages = 0;
>  	/*
>  	 * Check if the SLI port supports MDS Diagnostics
>  	 */
> @@ -12227,6 +12237,7 @@ int
>  lpfc_fof_queue_create(struct lpfc_hba *phba)
>  {
>  	struct lpfc_queue *qdesc;
> +	uint32_t wqesize;
>  
>  	/* Create FOF EQ */
>  	qdesc = lpfc_sli4_queue_alloc(phba, LPFC_DEFAULT_PAGE_SIZE,
> @@ -12240,7 +12251,7 @@ lpfc_fof_queue_create(struct lpfc_hba *phba)
>  	if (phba->cfg_fof) {
>  
>  		/* Create OAS CQ */
> -		if (phba->fcp_embed_io)
> +		if (phba->enab_exp_wqcq_pages)
>  			qdesc = lpfc_sli4_queue_alloc(phba,
>  						      LPFC_EXPANDED_PAGE_SIZE,
>  						      phba->sli4_hba.cq_esize,
> @@ -12256,16 +12267,19 @@ lpfc_fof_queue_create(struct lpfc_hba *phba)
>  		phba->sli4_hba.oas_cq = qdesc;
>  
>  		/* Create OAS WQ */
> -		if (phba->fcp_embed_io)
> +		if (phba->enab_exp_wqcq_pages) {
> +			wqesize = (phba->fcp_embed_io) ?
> +				LPFC_WQE128_SIZE : phba->sli4_hba.wq_esize;
>  			qdesc = lpfc_sli4_queue_alloc(phba,
>  						      LPFC_EXPANDED_PAGE_SIZE,
> -						      LPFC_WQE128_SIZE,
> +						      wqesize,
>  						      LPFC_WQE_EXP_COUNT);
> -		else
> +		} else {
>  			qdesc = lpfc_sli4_queue_alloc(phba,
>  						      LPFC_DEFAULT_PAGE_SIZE,
>  						      phba->sli4_hba.wq_esize,
>  						      phba->sli4_hba.wq_ecount);
> +		}
>  		if (!qdesc)
>  			goto out_error;
>  
> diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
> index 149f21f53b13..d08d9b48f6b1 100644
> --- a/drivers/scsi/lpfc/lpfc_sli.c
> +++ b/drivers/scsi/lpfc/lpfc_sli.c
> @@ -14910,7 +14910,8 @@ lpfc_wq_create(struct lpfc_hba *phba, struct lpfc_queue *wq,
>  	bf_set(lpfc_mbox_hdr_version, &shdr->request,
>  	       phba->sli4_hba.pc_sli4_params.wqv);
>  
> -	if (phba->sli4_hba.pc_sli4_params.wqsize & LPFC_WQ_SZ128_SUPPORT)
> +	if ((phba->sli4_hba.pc_sli4_params.wqsize & LPFC_WQ_SZ128_SUPPORT) ||
> +	    (wq->page_size > SLI4_PAGE_SIZE))
>  		wq_create_version = LPFC_Q_CREATE_VERSION_1;
>  	else
>  		wq_create_version = LPFC_Q_CREATE_VERSION_0;
> diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
> index 81fb58e59e60..a9af9980fc43 100644
> --- a/drivers/scsi/lpfc/lpfc_sli4.h
> +++ b/drivers/scsi/lpfc/lpfc_sli4.h
> @@ -485,6 +485,11 @@ struct lpfc_pc_sli4_params {
>  	uint8_t wqpcnt;
>  };
>  
> +#define LPFC_CQ_4K_PAGE_SZ	0x1
> +#define LPFC_CQ_16K_PAGE_SZ	0x4
> +#define LPFC_WQ_4K_PAGE_SZ	0x1
> +#define LPFC_WQ_16K_PAGE_SZ	0x4
> +
>  struct lpfc_iov {
>  	uint32_t pf_number;
>  	uint32_t vf_number;
> 
Please fix up also the comment in lpfc_init.c:

	/*
	 * Issue IOs with CDB embedded in WQE to minimized the number
	 * of DMAs the firmware has to do. Setting this to 1 also forces
	 * the driver to use 128 bytes WQEs for FCP IOs.
	 */

Which isn't true anymore.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 03/19] lpfc: move placement of target destroy on driver detach
  2018-01-24 22:45 ` [PATCH 03/19] lpfc: move placement of target destroy on driver detach James Smart
@ 2018-01-29  7:54   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  7:54 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Ensure nvme localports/targetports are torn down before
> dismantling the adapter sli interface on driver detachment.
> This aids leaving interfaces live while nvme may be making
> callbacks to abort it.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_init.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
> index 5b96bf0d3331..851d4e889042 100644
> --- a/drivers/scsi/lpfc/lpfc_init.c
> +++ b/drivers/scsi/lpfc/lpfc_init.c
> @@ -11503,13 +11503,6 @@ lpfc_pci_remove_one_s4(struct pci_dev *pdev)
>  	/* Remove FC host and then SCSI host with the physical port */
>  	fc_remove_host(shost);
>  	scsi_remove_host(shost);
> -	/*
> -	 * Bring down the SLI Layer. This step disables all interrupts,
> -	 * clears the rings, discards all mailbox commands, and resets
> -	 * the HBA FCoE function.
> -	 */
> -	lpfc_debugfs_terminate(vport);
> -	lpfc_sli4_hba_unset(phba);
>  
>  	/* Perform ndlp cleanup on the physical port.  The nvme and nvmet
>  	 * localports are destroyed after to cleanup all transport memory.
> @@ -11518,6 +11511,13 @@ lpfc_pci_remove_one_s4(struct pci_dev *pdev)
>  	lpfc_nvmet_destroy_targetport(phba);
>  	lpfc_nvme_destroy_localport(vport);
>  
> +	/*
> +	 * Bring down the SLI Layer. This step disables all interrupts,
> +	 * clears the rings, discards all mailbox commands, and resets
> +	 * the HBA FCoE function.
> +	 */
> +	lpfc_debugfs_terminate(vport);
> +	lpfc_sli4_hba_unset(phba);
>  
>  	lpfc_stop_hba_timers(phba);
>  	spin_lock_irq(&phba->hbalock);
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 04/19] lpfc: correct debug counters for abort
  2018-01-24 22:45 ` [PATCH 04/19] lpfc: correct debug counters for abort James Smart
@ 2018-01-29  7:55   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  7:55 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Existing code was using the wrong field for the completion status
> when comparing whether to increment abort statistics
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_nvmet.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
> index 8dbf5c9d51aa..7927ac46d345 100644
> --- a/drivers/scsi/lpfc/lpfc_nvmet.c
> +++ b/drivers/scsi/lpfc/lpfc_nvmet.c
> @@ -130,7 +130,7 @@ lpfc_nvmet_xmt_ls_rsp_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
>  	if (tgtp) {
>  		if (status) {
>  			atomic_inc(&tgtp->xmt_ls_rsp_error);
> -			if (status == IOERR_ABORT_REQUESTED)
> +			if (result == IOERR_ABORT_REQUESTED)
>  				atomic_inc(&tgtp->xmt_ls_rsp_aborted);
>  			if (bf_get(lpfc_wcqe_c_xb, wcqe))
>  				atomic_inc(&tgtp->xmt_ls_rsp_xb_set);
> @@ -541,7 +541,7 @@ lpfc_nvmet_xmt_fcp_op_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
>  		rsp->transferred_length = 0;
>  		if (tgtp) {
>  			atomic_inc(&tgtp->xmt_fcp_rsp_error);
> -			if (status == IOERR_ABORT_REQUESTED)
> +			if (result == IOERR_ABORT_REQUESTED)
>  				atomic_inc(&tgtp->xmt_fcp_rsp_aborted);
>  		}
>  
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 05/19] lpfc: Add WQ Full Logic for NVME Target
  2018-01-24 22:45 ` [PATCH 05/19] lpfc: Add WQ Full Logic for NVME Target James Smart
@ 2018-01-29  8:00   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:00 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> I/O conditions on the nvme target may have the driver submitting
> to a full hardware wq. The hardware wq is a shared resource among
> all nvme controllers. When the driver hit a full wq, it failed the
> io posting back to the nvme-fc transport, which then escalated it
> into errors.
> 
> Correct by maintaining a sideband queue within the driver that is
> added to when the WQ full condition is hit, and drained from as soon
> as new WQ space opens up.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_crtn.h  |   1 +
>  drivers/scsi/lpfc/lpfc_nvmet.c | 116 +++++++++++++++++++++++++++++++++++++++++
>  drivers/scsi/lpfc/lpfc_nvmet.h |   1 +
>  drivers/scsi/lpfc/lpfc_sli.c   |   3 ++
>  drivers/scsi/lpfc/lpfc_sli4.h  |   5 +-
>  5 files changed, 125 insertions(+), 1 deletion(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 06/19] lpfc: Fix PRLI handling when topology type changes
  2018-01-24 22:45 ` [PATCH 06/19] lpfc: Fix PRLI handling when topology type changes James Smart
@ 2018-01-29  8:01   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:01 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> The lpfc driver does not discover a target when the topology
> changes from switched-fabric to direct-connect. The target
> rejects the PRLI from the initiator in direct-connect as the
> driver is using the old S_ID from the switched topology.
> 
> The driver was inappropriately clearing the VP bit to register the
> VPI, which is what is associated with the S_ID.
> 
> Fix by leaving the VP bit set (it was set earlier) and as the VFI
> is being re-registered, set the UPDT bit.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_mbox.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
> index 81fb92967b11..c32d4a323db2 100644
> --- a/drivers/scsi/lpfc/lpfc_mbox.c
> +++ b/drivers/scsi/lpfc/lpfc_mbox.c
> @@ -2170,10 +2170,8 @@ lpfc_reg_vfi(struct lpfcMboxq *mbox, struct lpfc_vport *vport, dma_addr_t phys)
>  	/* Only FC supports upd bit */
>  	if ((phba->sli4_hba.lnk_info.lnk_tp == LPFC_LNK_TYPE_FC) &&
>  	    (vport->fc_flag & FC_VFI_REGISTERED) &&
> -	    (!phba->fc_topology_changed)) {
> -		bf_set(lpfc_reg_vfi_vp, reg_vfi, 0);
> +	    (!phba->fc_topology_changed))
>  		bf_set(lpfc_reg_vfi_upd, reg_vfi, 1);
> -	}
>  
>  	bf_set(lpfc_reg_vfi_bbcr, reg_vfi, 0);
>  	bf_set(lpfc_reg_vfi_bbscn, reg_vfi, 0);
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 07/19] lpfc: Fix IO failure during hba reset testing with nvme io.
  2018-01-24 22:45 ` [PATCH 07/19] lpfc: Fix IO failure during hba reset testing with nvme io James Smart
@ 2018-01-29  8:06   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:06 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> A stress test repeatedly resetting the adapter while performing
> io would eventually report I/O failures and missing nvme namespaces.
> 
> The driver was setting the nvmefc_fcp_req->private pointer to NULL
> during the IO completion routine before upcalling done().
> If the transport was also running an abort for that IO, the driver
> would fail the abort with message 6140. Failing the abort is not
> allowed by the nvme-fc transport, as it mandates that the io must be
> returned back to the transport. As that does not happen, the transport
> controller delete has an outstanding reference and can't complete
> teardown.
> 
> Remove the NULL'ing of the private pointer in the nvmefc request.
> The driver simply overwrites this value on each IO start.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_nvme.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
> index 81e3a4f10c3c..92643ffa79c3 100644
> --- a/drivers/scsi/lpfc/lpfc_nvme.c
> +++ b/drivers/scsi/lpfc/lpfc_nvme.c
> @@ -804,7 +804,6 @@ lpfc_nvme_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
>  	struct nvme_fc_cmd_iu *cp;
>  	struct lpfc_nvme_rport *rport;
>  	struct lpfc_nodelist *ndlp;
> -	struct lpfc_nvme_fcpreq_priv *freqpriv;
>  	struct lpfc_nvme_lport *lport;
>  	unsigned long flags;
>  	uint32_t code, status;
> @@ -980,8 +979,6 @@ lpfc_nvme_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
>  			phba->cpucheck_cmpl_io[lpfc_ncmd->cpu]++;
>  	}
>  #endif
> -	freqpriv = nCmd->private;
> -	freqpriv->nvme_buf = NULL;
>  
>  	/* NVME targets need completion held off until the abort exchange
>  	 * completes unless the NVME Rport is getting unregistered.
> 
I would avoid that if possible.
By not zeroing the pointers we run into the risk of executing the wrong
callback on stale commands.
Can't you just modify the abort handling to always return 'true' if this
condition is hit?

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 08/19] lpfc: Fix RQ empty firmware trap
  2018-01-24 22:45 ` [PATCH 08/19] lpfc: Fix RQ empty firmware trap James Smart
@ 2018-01-29  8:07   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:07 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> When nvme target deferred receive logic waits for exchange
> resources, the corresponding receive buffer is not replenished
> with the hardware. This can result in a lack of asynchronous
> receive buffer resources in the hardware, resulting in a
> "2885 Port Status Event: ... error 1=0x52004a01 ..." message.
> 
> Correct by replenishing the buffer whenenver the deferred
> logic kicks in.  Update corresponding debug messages and
> statistics as well.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_attr.c  |  6 ++++++
>  drivers/scsi/lpfc/lpfc_mem.c   |  8 ++++++--
>  drivers/scsi/lpfc/lpfc_nvmet.c | 31 +++++++++++++++++++++----------
>  drivers/scsi/lpfc/lpfc_nvmet.h |  7 +++++--
>  drivers/scsi/lpfc/lpfc_sli.c   | 12 ++++++++++++
>  5 files changed, 50 insertions(+), 14 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 09/19] lpfc: Allow set of maximum outstanding SCSI cmd limit for a target parameter
  2018-01-24 22:45 ` [PATCH 09/19] lpfc: Allow set of maximum outstanding SCSI cmd limit for a target parameter James Smart
@ 2018-01-29  8:08   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:08 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Make the attribute writeable.
> Remove the ramp up to logic as its unnecessary, simply set depth.
> Add debug message if depth changed, possibly reducing limit, yet
> our outstanding count has yet to catch up with it.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_attr.c |  4 ++--
>  drivers/scsi/lpfc/lpfc_scsi.c | 39 ++++++++++++++++++++++++++++-----------
>  2 files changed, 30 insertions(+), 13 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 10/19] lpfc: Fix soft lockup in lpfc worker thread during LIP testing
  2018-01-24 22:45 ` [PATCH 10/19] lpfc: Fix soft lockup in lpfc worker thread during LIP testing James Smart
@ 2018-01-29  8:13   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:13 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> During link bounce testing in a point-to-point topology, the
> host may enter a soft lockup on the lpfc_worker thread:
>     Call Trace:
>      lpfc_work_done+0x1f3/0x1390 [lpfc]
>      lpfc_do_work+0x16f/0x180 [lpfc]
>      kthread+0xc7/0xe0
>      ret_from_fork+0x3f/0x70
> 
> The driver was simultaneously setting a combination of flags
> that caused lpfc_do_work()to effectively spin between slow path
> work and new event data, causing the lockup.
> 
> Ensure in the typical wq completions, that new event data flags
> are set if the slow path flag is running. The slow path will
> eventually reschedule the wq handling.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_hbadisc.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
> index b159a5c4e388..9265906d956e 100644
> --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
> +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
> @@ -696,8 +696,9 @@ lpfc_work_done(struct lpfc_hba *phba)
>  		      phba->hba_flag & HBA_SP_QUEUE_EVT)) {
>  		if (pring->flag & LPFC_STOP_IOCB_EVENT) {
>  			pring->flag |= LPFC_DEFERRED_RING_EVENT;
> -			/* Set the lpfc data pending flag */
> -			set_bit(LPFC_DATA_READY, &phba->data_flags);
> +			/* Preserve legacy behavior. */
> +			if (!(phba->hba_flag & HBA_SP_QUEUE_EVT))
> +				set_bit(LPFC_DATA_READY, &phba->data_flags);
>  		} else {
>  			if (phba->link_state >= LPFC_LINK_UP ||
>  			    phba->link_flag & LS_MDS_LOOPBACK) {
> 
_Actually_ lpfc_do_work() and friends could be replace with a workqueue ...
But anyway.

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

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 11/19] lpfc: Fix issue_lip if link is disabled
  2018-01-24 22:45 ` [PATCH 11/19] lpfc: Fix issue_lip if link is disabled James Smart
@ 2018-01-29  8:13   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:13 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> The driver ignored checks on whether the link should be
> kept administratively down after a link bounce. Correct the
> checks.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_attr.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
> index d8064e3ea0ba..b79dad7b8278 100644
> --- a/drivers/scsi/lpfc/lpfc_attr.c
> +++ b/drivers/scsi/lpfc/lpfc_attr.c
> @@ -911,7 +911,12 @@ lpfc_issue_lip(struct Scsi_Host *shost)
>  	LPFC_MBOXQ_t *pmboxq;
>  	int mbxstatus = MBXERR_ERROR;
>  
> +	/*
> +	 * If the link is offline, disabled or BLOCK_MGMT_IO
> +	 * it doesn't make any sense to allow issue_lip
> +	 */
>  	if ((vport->fc_flag & FC_OFFLINE_MODE) ||
> +	    (phba->hba_flag & LINK_DISABLED) ||
>  	    (phba->sli.sli_flag & LPFC_BLOCK_MGMT_IO))
>  		return -EPERM;
>  
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 12/19] lpfc: Indicate CONF support in NVMe PRLI
  2018-01-24 22:45 ` [PATCH 12/19] lpfc: Indicate CONF support in NVMe PRLI James Smart
@ 2018-01-29  8:28   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:28 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Revise the NVME PRLI to indicate CONF support.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_els.c       | 3 ++-
>  drivers/scsi/lpfc/lpfc_hw4.h       | 6 +++---
>  drivers/scsi/lpfc/lpfc_nportdisc.c | 3 ---
>  3 files changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
> index 234c7c015982..404e1af5e2ab 100644
> --- a/drivers/scsi/lpfc/lpfc_els.c
> +++ b/drivers/scsi/lpfc/lpfc_els.c
> @@ -2293,10 +2293,11 @@ lpfc_issue_els_prli(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
>  		if (phba->nvmet_support) {
>  			bf_set(prli_tgt, npr_nvme, 1);
>  			bf_set(prli_disc, npr_nvme, 1);
> -
>  		} else {
>  			bf_set(prli_init, npr_nvme, 1);
> +			bf_set(prli_conf, npr_nvme, 1);
>  		}
> +
>  		npr_nvme->word1 = cpu_to_be32(npr_nvme->word1);
>  		npr_nvme->word4 = cpu_to_be32(npr_nvme->word4);
>  		elsiocb->iocb_flag |= LPFC_PRLI_NVME_REQ;
> diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
> index ef469129fb71..7c3afc3d3121 100644
> --- a/drivers/scsi/lpfc/lpfc_hw4.h
> +++ b/drivers/scsi/lpfc/lpfc_hw4.h
> @@ -4346,9 +4346,9 @@ struct lpfc_nvme_prli {
>  #define prli_init_SHIFT                 5
>  #define prli_init_MASK                  0x00000001
>  #define prli_init_WORD                  word4
> -#define prli_recov_SHIFT                8
> -#define prli_recov_MASK                 0x00000001
> -#define prli_recov_WORD                 word4
> +#define prli_conf_SHIFT                 7
> +#define prli_conf_MASK                  0x00000001
> +#define prli_conf_WORD                  word4
>  	uint32_t word5;
>  #define prli_fb_sz_SHIFT                0
>  #define prli_fb_sz_MASK                 0x0000ffff
> diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
> index d841aa42f607..bbf1e1342b09 100644
> --- a/drivers/scsi/lpfc/lpfc_nportdisc.c
> +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
> @@ -2011,9 +2011,6 @@ lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
>  			}
>  		}
>  
> -		if (bf_get_be32(prli_recov, nvpr))
> -			ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
> -
>  		lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
>  				 "6029 NVME PRLI Cmpl w1 x%08x "
>  				 "w4 x%08x w5 x%08x flag x%x, "
> 
If you say so :-)

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

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 13/19] lpfc: Fix SCSI io host reset causing kernel crash
  2018-01-24 22:45 ` [PATCH 13/19] lpfc: Fix SCSI io host reset causing kernel crash James Smart
@ 2018-01-29  8:29   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:29 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> During SCSI error handling escalation to host reset, the SCSI io
> routines were moved off the txcmplq, but the individual io's
> ON_CMPLQ flag wasn't cleared.  Thus, a background thread saw the
> io and attempted to access it as if on the txcmplq.
> 
> Clear the flag upon removal.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_init.c |  4 ++++
>  drivers/scsi/lpfc/lpfc_sli.c  | 13 ++++++++++++-
>  2 files changed, 16 insertions(+), 1 deletion(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 14/19] lpfc: Validate adapter support for SRIU option
  2018-01-24 22:45 ` [PATCH 14/19] lpfc: Validate adapter support for SRIU option James Smart
@ 2018-01-29  8:30   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:30 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> When using the special option to suppress the response iu, ensure
> the adapter fully supports the feature by checking feature flags
> from the adapter.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_hw4.h  |  3 +++
>  drivers/scsi/lpfc/lpfc_init.c | 13 ++++++++++++-
>  2 files changed, 15 insertions(+), 1 deletion(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 15/19] lpfc: Fix header inclusion in lpfc_nvmet
  2018-01-24 22:45 ` [PATCH 15/19] lpfc: Fix header inclusion in lpfc_nvmet James Smart
@ 2018-01-29  8:30   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:30 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> The driver was inappropriately pulling in the nvme host's
> nvme.h header. What it really needed was the standard
> <linux/nvme.h> header.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_nvmet.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
> index 0539585d32d4..f8863c51ba20 100644
> --- a/drivers/scsi/lpfc/lpfc_nvmet.c
> +++ b/drivers/scsi/lpfc/lpfc_nvmet.c
> @@ -36,7 +36,7 @@
>  #include <scsi/scsi_transport_fc.h>
>  #include <scsi/fc/fc_fs.h>
>  
> -#include <../drivers/nvme/host/nvme.h>
> +#include <linux/nvme.h>
>  #include <linux/nvme-fc-driver.h>
>  #include <linux/nvme-fc.h>
>  
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 16/19] lpfc: Treat SCSI Write operation Underruns as an error
  2018-01-24 22:45 ` [PATCH 16/19] lpfc: Treat SCSI Write operation Underruns as an error James Smart
@ 2018-01-29  8:33   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:33 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Currently, write underruns (mismatch of amount transferred vs scsi
> status and its residual) detected by the adapter are not being
> flagged as an error. Its expected the target controls the data
> transfer and would appropriately set the RSP values.  Only read
> underruns are treated as errors.
> 
> Revise the SCSI error handling to treat write underruns as an
> error as well.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_scsi.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
> index dcc86936e6fc..10c2dc0cf1fa 100644
> --- a/drivers/scsi/lpfc/lpfc_scsi.c
> +++ b/drivers/scsi/lpfc/lpfc_scsi.c
> @@ -3772,20 +3772,18 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
>  		scsi_set_resid(cmnd, be32_to_cpu(fcprsp->rspResId));
>  
>  		lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP_UNDER,
> -				 "9025 FCP Read Underrun, expected %d, "
> +				 "9025 FCP Underrun, expected %d, "
>  				 "residual %d Data: x%x x%x x%x\n",
>  				 fcpDl,
>  				 scsi_get_resid(cmnd), fcpi_parm, cmnd->cmnd[0],
>  				 cmnd->underflow);
>  
>  		/*
> -		 * If there is an under run check if under run reported by
> +		 * If there is an under run, check if under run reported by
>  		 * storage array is same as the under run reported by HBA.
>  		 * If this is not same, there is a dropped frame.
>  		 */
> -		if ((cmnd->sc_data_direction == DMA_FROM_DEVICE) &&
> -			fcpi_parm &&
> -			(scsi_get_resid(cmnd) != fcpi_parm)) {
> +		if (fcpi_parm && (scsi_get_resid(cmnd) != fcpi_parm)) {
>  			lpfc_printf_vlog(vport, KERN_WARNING,
>  					 LOG_FCP | LOG_FCP_ERROR,
>  					 "9026 FCP Read Check Error "
> 
I so hope you have this tested ...

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

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 17/19] lpfc: Fix nonrecovery of NVME controller after cable swap.
  2018-01-24 22:45 ` [PATCH 17/19] lpfc: Fix nonrecovery of NVME controller after cable swap James Smart
@ 2018-01-29  8:34   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:34 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> In a test that is doing large numbers of cable swaps on the target,
> the nvme controllers wouldn't reconnect.
> 
> During the cable swaps, the targets n_port_id would change. This
> information was passed to the nvme-fc transport, in the new remoteport
> registration. However, the nvme-fc transport didn't update the n_port_id
> value in the remoteport struct when it reused an existing structure.
> Later, when a new association was attempted on the remoteport, the
> driver's NVME LS routine would use the stale n_port_id from the remoteport
> struct to address the LS. As the device is no longer at that address,
> the LS would go into never never land.
> 
> Separately, the nvme-fc transport will be corrected to update the
> n_port_id value on a re-registration.
> 
> However, for now, there's no reason to use the transports values.
> The private pointer points to the drivers node structure and the
> node structure is up to date. Therefore, revise the LS routine to
> use the drivers data structures for the LS. Augmented the debug
> message for better debugging in the future.
> 
> Also removed a duplicate if check that seems to have slipped in.
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_nvme.c | 24 +++++++++++++-----------
>  1 file changed, 13 insertions(+), 11 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 18/19] lpfc: update driver version to 11.4.0.7
  2018-01-24 22:45 ` [PATCH 18/19] lpfc: update driver version to 11.4.0.7 James Smart
@ 2018-01-29  8:34   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:34 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Update the driver version to 11.4.0.7
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_version.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
> index c232bf0e8998..6f4092cb903e 100644
> --- a/drivers/scsi/lpfc/lpfc_version.h
> +++ b/drivers/scsi/lpfc/lpfc_version.h
> @@ -20,7 +20,7 @@
>   * included with this package.                                     *
>   *******************************************************************/
>  
> -#define LPFC_DRIVER_VERSION "11.4.0.6"
> +#define LPFC_DRIVER_VERSION "11.4.0.7"
>  #define LPFC_DRIVER_NAME		"lpfc"
>  
>  /* Used for SLI 2/3 */
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: [PATCH 19/19] lpfc: Update modified files for 2018 Copyright
  2018-01-24 22:45 ` [PATCH 19/19] lpfc: Update modified files for 2018 Copyright James Smart
@ 2018-01-29  8:35   ` Hannes Reinecke
  0 siblings, 0 replies; 39+ messages in thread
From: Hannes Reinecke @ 2018-01-29  8:35 UTC (permalink / raw)
  To: James Smart, linux-scsi; +Cc: Dick Kennedy, James Smart

On 01/24/2018 11:45 PM, James Smart wrote:
> Updated Copyright in files updated 11.4.0.7
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc.h           | 2 +-
>  drivers/scsi/lpfc/lpfc_attr.c      | 2 +-
>  drivers/scsi/lpfc/lpfc_crtn.h      | 2 +-
>  drivers/scsi/lpfc/lpfc_els.c       | 2 +-
>  drivers/scsi/lpfc/lpfc_hbadisc.c   | 2 +-
>  drivers/scsi/lpfc/lpfc_hw4.h       | 2 +-
>  drivers/scsi/lpfc/lpfc_init.c      | 2 +-
>  drivers/scsi/lpfc/lpfc_mbox.c      | 2 +-
>  drivers/scsi/lpfc/lpfc_mem.c       | 2 +-
>  drivers/scsi/lpfc/lpfc_nportdisc.c | 4 ++--
>  drivers/scsi/lpfc/lpfc_nvme.c      | 2 +-
>  drivers/scsi/lpfc/lpfc_nvmet.c     | 2 +-
>  drivers/scsi/lpfc/lpfc_nvmet.h     | 2 +-
>  drivers/scsi/lpfc/lpfc_scsi.c      | 2 +-
>  drivers/scsi/lpfc/lpfc_sli.c       | 3 +--
>  drivers/scsi/lpfc/lpfc_sli4.h      | 2 +-
>  drivers/scsi/lpfc/lpfc_version.h   | 2 +-
>  17 files changed, 18 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
> index d042f9118e3b..9698b9635058 100644
> --- a/drivers/scsi/lpfc/lpfc.h
> +++ b/drivers/scsi/lpfc/lpfc.h
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
> index b79dad7b8278..70bd25666243 100644
> --- a/drivers/scsi/lpfc/lpfc_attr.c
> +++ b/drivers/scsi/lpfc/lpfc_attr.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
> index 3ecf50df93f4..14a86b5b51e4 100644
> --- a/drivers/scsi/lpfc/lpfc_crtn.h
> +++ b/drivers/scsi/lpfc/lpfc_crtn.h
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
> index 404e1af5e2ab..ba896554a14f 100644
> --- a/drivers/scsi/lpfc/lpfc_els.c
> +++ b/drivers/scsi/lpfc/lpfc_els.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
> index 9265906d956e..f5bbac3cadbb 100644
> --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
> +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
> index 52fe28ae50fa..8685d26e6929 100644
> --- a/drivers/scsi/lpfc/lpfc_hw4.h
> +++ b/drivers/scsi/lpfc/lpfc_hw4.h
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2009-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
> index 895b1da784ee..04a77c308836 100644
> --- a/drivers/scsi/lpfc/lpfc_init.c
> +++ b/drivers/scsi/lpfc/lpfc_init.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
> index c32d4a323db2..7313ceb0f23b 100644
> --- a/drivers/scsi/lpfc/lpfc_mbox.c
> +++ b/drivers/scsi/lpfc/lpfc_mbox.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
> index 60078e61da5e..41361662ff08 100644
> --- a/drivers/scsi/lpfc/lpfc_mem.c
> +++ b/drivers/scsi/lpfc/lpfc_mem.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2014 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
> index bbf1e1342b09..b63179d895e2 100644
> --- a/drivers/scsi/lpfc/lpfc_nportdisc.c
> +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
> @@ -1,7 +1,7 @@
> - /*******************************************************************
> +/*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
> index fc6d85f0bfcf..527e63c1f1ac 100644
> --- a/drivers/scsi/lpfc/lpfc_nvme.c
> +++ b/drivers/scsi/lpfc/lpfc_nvme.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
> index f8863c51ba20..5b9f456a9f5e 100644
> --- a/drivers/scsi/lpfc/lpfc_nvmet.c
> +++ b/drivers/scsi/lpfc/lpfc_nvmet.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channsel Host Bus Adapters.                               *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_nvmet.h b/drivers/scsi/lpfc/lpfc_nvmet.h
> index 5da35de5ea45..c1bcef3f103c 100644
> --- a/drivers/scsi/lpfc/lpfc_nvmet.h
> +++ b/drivers/scsi/lpfc/lpfc_nvmet.h
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
> index 10c2dc0cf1fa..c595046a521b 100644
> --- a/drivers/scsi/lpfc/lpfc_scsi.c
> +++ b/drivers/scsi/lpfc/lpfc_scsi.c
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
> index d597e15a1974..e97d080e9f65 100644
> --- a/drivers/scsi/lpfc/lpfc_sli.c
> +++ b/drivers/scsi/lpfc/lpfc_sli.c
> @@ -1,8 +1,7 @@
> -
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
> index ac81bfa59278..4545c1fdcb55 100644
> --- a/drivers/scsi/lpfc/lpfc_sli4.h
> +++ b/drivers/scsi/lpfc/lpfc_sli4.h
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2009-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
> index 6f4092cb903e..3b04ecb17a38 100644
> --- a/drivers/scsi/lpfc/lpfc_version.h
> +++ b/drivers/scsi/lpfc/lpfc_version.h
> @@ -1,7 +1,7 @@
>  /*******************************************************************
>   * This file is part of the Emulex Linux Device Driver for         *
>   * Fibre Channel Host Bus Adapters.                                *
> - * Copyright (C) 2017 Broadcom. All Rights Reserved. The term      *
> + * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
>   * “Broadcom” refers to Broadcom Limited and/or its subsidiaries.  *
>   * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
>   * EMULEX and SLI are trademarks of Emulex.                        *
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@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)

^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2018-01-29 11:23 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-24 22:45 [PATCH 00/19] lpfc updates for 11.4.0.7 James Smart
2018-01-24 22:45 ` [PATCH 01/19] lpfc: Fix frequency of Release WQE CQEs James Smart
2018-01-29  7:50   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 02/19] lpfc: Increase CQ and WQ sizes for SCSI James Smart
2018-01-29  7:54   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 03/19] lpfc: move placement of target destroy on driver detach James Smart
2018-01-29  7:54   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 04/19] lpfc: correct debug counters for abort James Smart
2018-01-29  7:55   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 05/19] lpfc: Add WQ Full Logic for NVME Target James Smart
2018-01-29  8:00   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 06/19] lpfc: Fix PRLI handling when topology type changes James Smart
2018-01-29  8:01   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 07/19] lpfc: Fix IO failure during hba reset testing with nvme io James Smart
2018-01-29  8:06   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 08/19] lpfc: Fix RQ empty firmware trap James Smart
2018-01-29  8:07   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 09/19] lpfc: Allow set of maximum outstanding SCSI cmd limit for a target parameter James Smart
2018-01-29  8:08   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 10/19] lpfc: Fix soft lockup in lpfc worker thread during LIP testing James Smart
2018-01-29  8:13   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 11/19] lpfc: Fix issue_lip if link is disabled James Smart
2018-01-29  8:13   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 12/19] lpfc: Indicate CONF support in NVMe PRLI James Smart
2018-01-29  8:28   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 13/19] lpfc: Fix SCSI io host reset causing kernel crash James Smart
2018-01-29  8:29   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 14/19] lpfc: Validate adapter support for SRIU option James Smart
2018-01-29  8:30   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 15/19] lpfc: Fix header inclusion in lpfc_nvmet James Smart
2018-01-29  8:30   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 16/19] lpfc: Treat SCSI Write operation Underruns as an error James Smart
2018-01-29  8:33   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 17/19] lpfc: Fix nonrecovery of NVME controller after cable swap James Smart
2018-01-29  8:34   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 18/19] lpfc: update driver version to 11.4.0.7 James Smart
2018-01-29  8:34   ` Hannes Reinecke
2018-01-24 22:45 ` [PATCH 19/19] lpfc: Update modified files for 2018 Copyright James Smart
2018-01-29  8:35   ` Hannes Reinecke

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.