Re: [PATCH 13/17] lpfc: NVME Target: Merge into FC discovery

2017-01-18 Thread Hannes Reinecke
On 01/18/2017 02:20 AM, James Smart wrote:
> 
> NVME Target: Merge into FC discovery
> 
> Adds NVME PRLI handling and Nameserver registrations for NVME
> 
> Signed-off-by: Dick Kennedy 
> Signed-off-by: James Smart 
> ---
>  drivers/scsi/lpfc/lpfc_ct.c|  8 +++-
>  drivers/scsi/lpfc/lpfc_els.c   | 34 ++
>  drivers/scsi/lpfc/lpfc_hbadisc.c   | 27 +++
>  drivers/scsi/lpfc/lpfc_nportdisc.c | 35 ---
>  4 files changed, 92 insertions(+), 12 deletions(-)
> 
Reviewed-by: Hannes Reinecke 

Cheers,

Hannes
-- 
Dr. Hannes ReineckeTeamlead Storage & Networking
h...@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)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 13/17] lpfc: NVME Target: Merge into FC discovery

2017-01-17 Thread James Smart

NVME Target: Merge into FC discovery

Adds NVME PRLI handling and Nameserver registrations for NVME

Signed-off-by: Dick Kennedy 
Signed-off-by: James Smart 
---
 drivers/scsi/lpfc/lpfc_ct.c|  8 +++-
 drivers/scsi/lpfc/lpfc_els.c   | 34 ++
 drivers/scsi/lpfc/lpfc_hbadisc.c   | 27 +++
 drivers/scsi/lpfc/lpfc_nportdisc.c | 35 ---
 4 files changed, 92 insertions(+), 12 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c
index 6aba862..d52b8bc 100644
--- a/drivers/scsi/lpfc/lpfc_ct.c
+++ b/drivers/scsi/lpfc/lpfc_ct.c
@@ -1433,7 +1433,13 @@ lpfc_ns_cmd(struct lpfc_vport *vport, int cmdcode,
if (((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) ||
 (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME)) &&
(context == FC_TYPE_NVME)) {
-   lpfc_nvme_update_localport(vport);
+   if ((vport == phba->pport) && phba->nvmet_support) {
+   CtReq->un.rff.fbits = (FC4_FEATURE_TARGET |
+   FC4_FEATURE_NVME_DISC);
+   /* todo: update targetport attributes */
+   } else {
+   lpfc_nvme_update_localport(vport);
+   }
CtReq->un.rff.type_code = context;
 
} else if (((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) ||
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 6d2b163..d40fcc8 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -2214,7 +2214,13 @@ lpfc_issue_els_prli(struct lpfc_vport *vport, struct 
lpfc_nodelist *ndlp,
!phba->nvmet_support)
bf_set(prli_fba, npr_nvme, 1);
 
-   bf_set(prli_init, npr_nvme, 1);
+   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);
+   }
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;
@@ -2626,8 +2632,11 @@ lpfc_cmpl_els_logo(struct lpfc_hba *phba, struct 
lpfc_iocbq *cmdiocb,
phba->pport->fc_myDID = 0;
 
if ((phba->cfg_enable_fc4_type == LPFC_ENABLE_BOTH) ||
-   (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME))
-   lpfc_nvme_update_localport(phba->pport);
+   (phba->cfg_enable_fc4_type == LPFC_ENABLE_NVME)) {
+   if (!phba->nvmet_support)
+   lpfc_nvme_update_localport(phba->pport);
+   /* todo: tgt: update targetport attributes */
+   }
 
mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
if (mbox) {
@@ -4408,7 +4417,22 @@ lpfc_els_rsp_prli_acc(struct lpfc_vport *vport, struct 
lpfc_iocbq *oldiocb,
bf_set(prli_type_code, npr_nvme, PRLI_NVME_TYPE);
bf_set(prli_estabImagePair, npr_nvme, 0);  /* Should be 0 */
bf_set(prli_acc_rsp_code, npr_nvme, PRLI_REQ_EXECUTED);
-   bf_set(prli_init, npr_nvme, 1);
+   if (phba->nvmet_support) {
+   bf_set(prli_tgt, npr_nvme, 1);
+   bf_set(prli_disc, npr_nvme, 1);
+   if (phba->cfg_nvme_enable_fb) {
+   bf_set(prli_fba, npr_nvme, 1);
+
+   /* TBD.  Target mode needs to post buffers
+* that support the configured first burst
+* byte size.
+*/
+   bf_set(prli_fb_sz, npr_nvme,
+  phba->cfg_nvmet_fb_size);
+   }
+   } else {
+   bf_set(prli_init, npr_nvme, 1);
+   }
 
lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
 "6015 NVME issue PRLI ACC word1 x%08x "
@@ -5827,6 +5851,8 @@ lpfc_rscn_recovery_check(struct lpfc_vport *vport)
(ndlp->nlp_state == NLP_STE_UNUSED_NODE) ||
!lpfc_rscn_payload_check(vport, ndlp->nlp_DID))
continue;
+   if (vport->phba->nvmet_support)
+   continue;
lpfc_disc_state_machine(vport, ndlp, NULL,
NLP_EVT_DEVICE_RECOVERY);
lpfc_cancel_retry_delay_tmo(vport, ndlp);
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 291a4cb..cc4462b 100