* [PATCH 00/13] qla2xxx: Fixes for FC-NVMe
@ 2018-03-12 18:16 Himanshu Madhani
2018-03-12 18:16 ` [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup " Himanshu Madhani
` (12 more replies)
0 siblings, 13 replies; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
Hi Martin,
This patch series addresses issue with FC-NVMe abort handling in the
driver. Code has been cleaned up and devloss timeout support has been
added in qla2xxx.
Please apply this series to 4.17/scsi-queue at your earliest convenience.
Hi Christoph, Sagi,
Please review this series. I would however like this to be merged via
Martin's SCSI tree.
Thanks,
Himanshu
Darren Trapp (10):
qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote()
qla2xxx: Add changes for devloss timeout in driver
qla2xxx: Restore ZIO threshold setting
qla2xxx: Add FC-NVMe abort processing
qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change
qla2xxx: Return busy if rport going away
qla2xxx: Remove nvme_done_list
qla2xxx: Fix retry for PRLI RJT with reason of BUSY
qla2xxx: Fix FC-NVMe IO abort during driver reset
qla2xxx: Cleanup code to improve FC-NVMe error handling
Himanshu Madhani (2):
qla2xxx: Remove unneeded message and minor cleanup for FC-NVMe
qla2xxx: Update driver version to 10.00.00.06-k
Quinn Tran (1):
qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan
drivers/scsi/qla2xxx/qla_dbg.c | 2 +-
drivers/scsi/qla2xxx/qla_def.h | 12 +-
drivers/scsi/qla2xxx/qla_gbl.h | 4 +-
drivers/scsi/qla2xxx/qla_gs.c | 231 +++++++++++++++++++++++++++-------
drivers/scsi/qla2xxx/qla_init.c | 35 ++++--
drivers/scsi/qla2xxx/qla_isr.c | 78 +++++-------
drivers/scsi/qla2xxx/qla_mbx.c | 10 +-
drivers/scsi/qla2xxx/qla_mid.c | 6 -
drivers/scsi/qla2xxx/qla_nvme.c | 245 +++++++++++++++++--------------------
drivers/scsi/qla2xxx/qla_nvme.h | 9 +-
drivers/scsi/qla2xxx/qla_os.c | 11 +-
drivers/scsi/qla2xxx/qla_target.c | 13 +-
drivers/scsi/qla2xxx/qla_target.h | 2 +-
drivers/scsi/qla2xxx/qla_version.h | 2 +-
14 files changed, 395 insertions(+), 265 deletions(-)
--
2.12.0
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup for FC-NVMe
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:12 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 02/13] qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote() Himanshu Madhani
` (11 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_nvme.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 6b33a1f24f56..162a523b985e 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -113,8 +113,6 @@ static int qla_nvme_alloc_queue(struct nvme_fc_local_port *lport,
return 0;
}
- ql_log(ql_log_warn, vha, 0xffff,
- "allocating q for idx=%x w/o cpu mask\n", qidx);
qpair = qla2xxx_create_qpair(vha, 5, vha->vp_idx, true);
if (qpair == NULL) {
ql_log(ql_log_warn, vha, 0x2122,
@@ -313,7 +311,6 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
uint16_t avail_dsds;
uint32_t *cur_dsd;
struct req_que *req = NULL;
- struct rsp_que *rsp = NULL;
struct scsi_qla_host *vha = sp->fcport->vha;
struct qla_hw_data *ha = vha->hw;
struct qla_qpair *qpair = sp->qpair;
@@ -322,15 +319,13 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
struct nvmefc_fcp_req *fd = nvme->u.nvme.desc;
uint32_t rval = QLA_SUCCESS;
+ /* Setup qpair pointers */
+ req = qpair->req;
tot_dsds = fd->sg_cnt;
/* Acquire qpair specific lock */
spin_lock_irqsave(&qpair->qp_lock, flags);
- /* Setup qpair pointers */
- req = qpair->req;
- rsp = qpair->rsp;
-
/* Check for room in outstanding command list. */
handle = req->current_outstanding_cmd;
for (index = 1; index < req->num_outstanding_cmds; index++) {
@@ -365,7 +360,7 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
struct nvme_fc_cmd_iu *cmd = fd->cmdaddr;
if (cmd->sqe.common.opcode == nvme_admin_async_event) {
nvme->u.nvme.aen_op = 1;
- atomic_inc(&vha->hw->nvme_active_aen_cnt);
+ atomic_inc(&ha->nvme_active_aen_cnt);
}
}
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 02/13] qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote()
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
2018-03-12 18:16 ` [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup " Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:13 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 03/13] qla2xxx: Add changes for devloss timeout in driver Himanshu Madhani
` (10 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_init.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index cb182b102bfd..6caccc52376a 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -5110,13 +5110,14 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
fcport->deleted = 0;
fcport->logout_on_delete = 1;
+ qla2x00_set_fcport_state(fcport, FCS_ONLINE);
+ qla2x00_iidma_fcport(vha, fcport);
+
if (fcport->fc4f_nvme) {
qla_nvme_register_remote(vha, fcport);
return;
}
- qla2x00_set_fcport_state(fcport, FCS_ONLINE);
- qla2x00_iidma_fcport(vha, fcport);
qla24xx_update_fcport_fcp_prio(vha, fcport);
reg_port:
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 03/13] qla2xxx: Add changes for devloss timeout in driver
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
2018-03-12 18:16 ` [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup " Himanshu Madhani
2018-03-12 18:16 ` [PATCH 02/13] qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote() Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:15 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 04/13] qla2xxx: Restore ZIO threshold setting Himanshu Madhani
` (9 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Add support for error recovery within devloss timeout, now that
FC-NVMe transport support devloss timeout.
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_def.h | 1 +
drivers/scsi/qla2xxx/qla_init.c | 8 +++
drivers/scsi/qla2xxx/qla_isr.c | 5 +-
drivers/scsi/qla2xxx/qla_nvme.c | 142 +++++++++++++++++---------------------
drivers/scsi/qla2xxx/qla_nvme.h | 6 +-
drivers/scsi/qla2xxx/qla_target.c | 13 ++--
drivers/scsi/qla2xxx/qla_target.h | 2 +-
7 files changed, 87 insertions(+), 90 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index c9689f97c307..737492048d8a 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2356,6 +2356,7 @@ typedef struct fc_port {
#define NVME_PRLI_SP_DISCOVERY BIT_3
uint8_t nvme_flag;
#define NVME_FLAG_REGISTERED 4
+#define NVME_FLAG_DELETING 2
struct fc_port *conflict;
unsigned char logout_completed;
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 6caccc52376a..dec3e2cdaffa 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -5520,6 +5520,14 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
break;
}
+ if (fcport->fc4f_nvme) {
+ if (fcport->disc_state == DSC_DELETE_PEND) {
+ fcport->disc_state = DSC_GNL;
+ vha->fcport_count--;
+ fcport->login_succ = 0;
+ }
+ }
+
if (found) {
spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
continue;
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 79f538448364..011261a9d585 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1911,7 +1911,7 @@ qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
} else {
switch (le16_to_cpu(sts->comp_status)) {
case CS_COMPLETE:
- ret = 0;
+ ret = QLA_SUCCESS;
break;
case CS_ABORTED:
@@ -1923,7 +1923,8 @@ qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
"NVME-%s ERR Handling - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
sp->name, sp->handle, sts->comp_status,
le32_to_cpu(sts->residual_len), sts->ox_id);
- fd->transferred_length = fd->payload_length;
+ fd->transferred_length = 0;
+ iocb->u.nvme.rsp_pyld_len = 0;
ret = QLA_ABORTED;
break;
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 162a523b985e..a8e81fc14c44 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -16,15 +16,13 @@ static void qla_nvme_unregister_remote_port(struct work_struct *);
int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
{
- struct nvme_rport *rport;
+ struct qla_nvme_rport *rport;
+ struct nvme_fc_port_info req;
int ret;
if (!IS_ENABLED(CONFIG_NVME_FC))
return 0;
- if (fcport->nvme_flag & NVME_FLAG_REGISTERED)
- return 0;
-
if (!vha->flags.nvme_enabled) {
ql_log(ql_log_info, vha, 0x2100,
"%s: Not registering target since Host NVME is not enabled\n",
@@ -33,38 +31,35 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
}
if (!(fcport->nvme_prli_service_param &
- (NVME_PRLI_SP_TARGET | NVME_PRLI_SP_DISCOVERY)))
+ (NVME_PRLI_SP_TARGET | NVME_PRLI_SP_DISCOVERY)) ||
+ (fcport->nvme_flag & NVME_FLAG_REGISTERED))
return 0;
INIT_WORK(&fcport->nvme_del_work, qla_nvme_unregister_remote_port);
- rport = kzalloc(sizeof(*rport), GFP_KERNEL);
- if (!rport) {
- ql_log(ql_log_warn, vha, 0x2101,
- "%s: unable to alloc memory\n", __func__);
- return -ENOMEM;
- }
- rport->req.port_name = wwn_to_u64(fcport->port_name);
- rport->req.node_name = wwn_to_u64(fcport->node_name);
- rport->req.port_role = 0;
+ memset(&req, 0, sizeof(struct nvme_fc_port_info));
+ req.port_name = wwn_to_u64(fcport->port_name);
+ req.node_name = wwn_to_u64(fcport->node_name);
+ req.port_role = 0;
+ req.dev_loss_tmo = NVME_FC_DEV_LOSS_TMO;
if (fcport->nvme_prli_service_param & NVME_PRLI_SP_INITIATOR)
- rport->req.port_role = FC_PORT_ROLE_NVME_INITIATOR;
+ req.port_role = FC_PORT_ROLE_NVME_INITIATOR;
if (fcport->nvme_prli_service_param & NVME_PRLI_SP_TARGET)
- rport->req.port_role |= FC_PORT_ROLE_NVME_TARGET;
+ req.port_role |= FC_PORT_ROLE_NVME_TARGET;
if (fcport->nvme_prli_service_param & NVME_PRLI_SP_DISCOVERY)
- rport->req.port_role |= FC_PORT_ROLE_NVME_DISCOVERY;
+ req.port_role |= FC_PORT_ROLE_NVME_DISCOVERY;
- rport->req.port_id = fcport->d_id.b24;
+ req.port_id = fcport->d_id.b24;
ql_log(ql_log_info, vha, 0x2102,
"%s: traddr=nn-0x%016llx:pn-0x%016llx PortID:%06x\n",
- __func__, rport->req.node_name, rport->req.port_name,
- rport->req.port_id);
+ __func__, req.node_name, req.port_name,
+ req.port_id);
- ret = nvme_fc_register_remoteport(vha->nvme_local_port, &rport->req,
+ ret = nvme_fc_register_remoteport(vha->nvme_local_port, &req,
&fcport->nvme_remote_port);
if (ret) {
ql_log(ql_log_warn, vha, 0x212e,
@@ -73,10 +68,11 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
return ret;
}
- fcport->nvme_remote_port->private = fcport;
- fcport->nvme_flag |= NVME_FLAG_REGISTERED;
+ rport = fcport->nvme_remote_port->private;
rport->fcport = fcport;
list_add_tail(&rport->list, &vha->nvme_rport_list);
+
+ fcport->nvme_flag |= NVME_FLAG_REGISTERED;
return 0;
}
@@ -174,26 +170,23 @@ static void qla_nvme_sp_done(void *ptr, int res)
if (!atomic_dec_and_test(&sp->ref_count))
return;
- if (!(sp->fcport->nvme_flag & NVME_FLAG_REGISTERED))
- goto rel;
-
- if (unlikely(res == QLA_FUNCTION_FAILED))
- fd->status = NVME_SC_INTERNAL;
- else
+ if (res == QLA_SUCCESS)
fd->status = 0;
+ else
+ fd->status = NVME_SC_INTERNAL;
fd->rcv_rsplen = nvme->u.nvme.rsp_pyld_len;
list_add_tail(&nvme->u.nvme.entry, &sp->qpair->nvme_done_list);
+
return;
-rel:
- qla2xxx_rel_qpair_sp(sp->qpair, sp);
}
static void qla_nvme_ls_abort(struct nvme_fc_local_port *lport,
struct nvme_fc_remote_port *rport, struct nvmefc_ls_req *fd)
{
struct nvme_private *priv = fd->private;
- fc_port_t *fcport = rport->private;
+ struct qla_nvme_rport *qla_rport = rport->private;
+ fc_port_t *fcport = qla_rport->fcport;
srb_t *sp = priv->sp;
int rval;
struct qla_hw_data *ha = fcport->vha->hw;
@@ -218,7 +211,8 @@ static void qla_nvme_ls_complete(struct work_struct *work)
static int qla_nvme_ls_req(struct nvme_fc_local_port *lport,
struct nvme_fc_remote_port *rport, struct nvmefc_ls_req *fd)
{
- fc_port_t *fcport = rport->private;
+ struct qla_nvme_rport *qla_rport = rport->private;
+ fc_port_t *fcport = qla_rport->fcport;
struct srb_iocb *nvme;
struct nvme_private *priv = fd->private;
struct scsi_qla_host *vha;
@@ -226,9 +220,6 @@ static int qla_nvme_ls_req(struct nvme_fc_local_port *lport,
struct qla_hw_data *ha;
srb_t *sp;
- if (!(fcport->nvme_flag & NVME_FLAG_REGISTERED))
- return rval;
-
vha = fcport->vha;
ha = vha->hw;
/* Alloc SRB structure */
@@ -275,7 +266,8 @@ static void qla_nvme_fcp_abort(struct nvme_fc_local_port *lport,
struct nvme_private *priv = fd->private;
srb_t *sp = priv->sp;
int rval;
- fc_port_t *fcport = rport->private;
+ struct qla_nvme_rport *qla_rport = rport->private;
+ fc_port_t *fcport = qla_rport->fcport;
struct qla_hw_data *ha = fcport->vha->hw;
rval = ha->isp_ops->abort_command(sp);
@@ -288,11 +280,10 @@ static void qla_nvme_fcp_abort(struct nvme_fc_local_port *lport,
static void qla_nvme_poll(struct nvme_fc_local_port *lport, void *hw_queue_handle)
{
- struct scsi_qla_host *vha = lport->private;
- unsigned long flags;
struct qla_qpair *qpair = hw_queue_handle;
+ unsigned long flags;
+ struct scsi_qla_host *vha = lport->private;
- /* Acquire ring specific lock */
spin_lock_irqsave(&qpair->qp_lock, flags);
qla24xx_process_response_queue(vha, qpair->rsp);
spin_unlock_irqrestore(&qpair->qp_lock, flags);
@@ -495,6 +486,7 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
srb_t *sp;
struct qla_qpair *qpair = hw_queue_handle;
struct nvme_private *priv;
+ struct qla_nvme_rport *qla_rport = rport->private;
if (!fd) {
ql_log(ql_log_warn, NULL, 0x2134, "NO NVMe FCP request\n");
@@ -502,14 +494,14 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
}
priv = fd->private;
- fcport = rport->private;
+ fcport = qla_rport->fcport;
if (!fcport) {
ql_log(ql_log_warn, NULL, 0x210e, "No fcport ptr\n");
return rval;
}
vha = fcport->vha;
- if ((!qpair) || (!(fcport->nvme_flag & NVME_FLAG_REGISTERED)))
+ if (!qpair)
return -EBUSY;
/* Alloc SRB structure */
@@ -552,22 +544,27 @@ static void qla_nvme_localport_delete(struct nvme_fc_local_port *lport)
static void qla_nvme_remoteport_delete(struct nvme_fc_remote_port *rport)
{
fc_port_t *fcport;
- struct nvme_rport *r_port, *trport;
+ struct qla_nvme_rport *qla_rport = rport->private, *trport;
- fcport = rport->private;
+ fcport = qla_rport->fcport;
fcport->nvme_remote_port = NULL;
fcport->nvme_flag &= ~NVME_FLAG_REGISTERED;
- list_for_each_entry_safe(r_port, trport,
+ list_for_each_entry_safe(qla_rport, trport,
&fcport->vha->nvme_rport_list, list) {
- if (r_port->fcport == fcport) {
- list_del(&r_port->list);
+ if (qla_rport->fcport == fcport) {
+ list_del(&qla_rport->list);
break;
}
}
- kfree(r_port);
complete(&fcport->nvme_del_done);
+ if (!test_bit(UNLOADING, &fcport->vha->dpc_flags)) {
+ INIT_WORK(&fcport->free_work, qlt_free_session_done);
+ schedule_work(&fcport->free_work);
+ }
+
+ fcport->nvme_flag &= ~(NVME_FLAG_REGISTERED | NVME_FLAG_DELETING);
ql_log(ql_log_info, fcport->vha, 0x2110,
"remoteport_delete of %p completed.\n", fcport);
}
@@ -587,7 +584,7 @@ static struct nvme_fc_port_template qla_nvme_fc_transport = {
.max_dif_sgl_segments = 64,
.dma_boundary = 0xFFFFFFFF,
.local_priv_sz = 8,
- .remote_priv_sz = 0,
+ .remote_priv_sz = sizeof(struct qla_nvme_rport),
.lsrqst_priv_sz = sizeof(struct nvme_private),
.fcprqst_priv_sz = sizeof(struct nvme_private),
};
@@ -606,22 +603,6 @@ static int qla_nvme_wait_on_command(srb_t *sp)
return ret;
}
-static int qla_nvme_wait_on_rport_del(fc_port_t *fcport)
-{
- int ret = QLA_SUCCESS;
- int timeout;
-
- timeout = wait_for_completion_timeout(&fcport->nvme_del_done,
- msecs_to_jiffies(2000));
- if (!timeout) {
- ret = QLA_FUNCTION_FAILED;
- ql_log(ql_log_info, fcport->vha, 0x2111,
- "timed out waiting for fcport=%p to delete\n", fcport);
- }
-
- return ret;
-}
-
void qla_nvme_abort(struct qla_hw_data *ha, struct srb *sp)
{
int rval;
@@ -636,7 +617,7 @@ static void qla_nvme_unregister_remote_port(struct work_struct *work)
{
struct fc_port *fcport = container_of(work, struct fc_port,
nvme_del_work);
- struct nvme_rport *rport, *trport;
+ struct qla_nvme_rport *qla_rport, *trport;
if (!IS_ENABLED(CONFIG_NVME_FC))
return;
@@ -644,51 +625,52 @@ static void qla_nvme_unregister_remote_port(struct work_struct *work)
ql_log(ql_log_warn, NULL, 0x2112,
"%s: unregister remoteport on %p\n",__func__, fcport);
- list_for_each_entry_safe(rport, trport,
+ list_for_each_entry_safe(qla_rport, trport,
&fcport->vha->nvme_rport_list, list) {
- if (rport->fcport == fcport) {
+ if (qla_rport->fcport == fcport) {
ql_log(ql_log_info, fcport->vha, 0x2113,
"%s: fcport=%p\n", __func__, fcport);
init_completion(&fcport->nvme_del_done);
nvme_fc_unregister_remoteport(
fcport->nvme_remote_port);
- qla_nvme_wait_on_rport_del(fcport);
+ wait_for_completion(&fcport->nvme_del_done);
+ break;
}
}
}
void qla_nvme_delete(struct scsi_qla_host *vha)
{
- struct nvme_rport *rport, *trport;
+ struct qla_nvme_rport *qla_rport, *trport;
fc_port_t *fcport;
int nv_ret;
if (!IS_ENABLED(CONFIG_NVME_FC))
return;
- list_for_each_entry_safe(rport, trport, &vha->nvme_rport_list, list) {
- fcport = rport->fcport;
+ list_for_each_entry_safe(qla_rport, trport,
+ &vha->nvme_rport_list, list) {
+ fcport = qla_rport->fcport;
ql_log(ql_log_info, fcport->vha, 0x2114, "%s: fcport=%p\n",
__func__, fcport);
init_completion(&fcport->nvme_del_done);
nvme_fc_unregister_remoteport(fcport->nvme_remote_port);
- qla_nvme_wait_on_rport_del(fcport);
+ wait_for_completion(&fcport->nvme_del_done);
}
if (vha->nvme_local_port) {
init_completion(&vha->nvme_del_done);
+ ql_log(ql_log_info, vha, 0x2116,
+ "unregister localport=%p\n",
+ vha->nvme_local_port);
nv_ret = nvme_fc_unregister_localport(vha->nvme_local_port);
- if (nv_ret == 0)
- ql_log(ql_log_info, vha, 0x2116,
- "unregistered localport=%p\n",
- vha->nvme_local_port);
- else
+ if (nv_ret)
ql_log(ql_log_info, vha, 0x2115,
"Unregister of localport failed\n");
- wait_for_completion_timeout(&vha->nvme_del_done,
- msecs_to_jiffies(5000));
+ else
+ wait_for_completion(&vha->nvme_del_done);
}
}
diff --git a/drivers/scsi/qla2xxx/qla_nvme.h b/drivers/scsi/qla2xxx/qla_nvme.h
index 7f05fa1c77db..7becfc1b3e69 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.h
+++ b/drivers/scsi/qla2xxx/qla_nvme.h
@@ -14,6 +14,9 @@
#include "qla_def.h"
+/* default dev loss time (seconds) before transport tears down ctrl */
+#define NVME_FC_DEV_LOSS_TMO 30
+
#define NVME_ATIO_CMD_OFF 32
#define NVME_FIRST_PACKET_CMDLEN (64 - NVME_ATIO_CMD_OFF)
#define Q2T_NVME_NUM_TAGS 2048
@@ -31,8 +34,7 @@ struct nvme_private {
int comp_status;
};
-struct nvme_rport {
- struct nvme_fc_port_info req;
+struct qla_nvme_rport {
struct list_head list;
struct fc_port *fcport;
};
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 245005f1e93e..40f1f0ab67cc 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -961,7 +961,7 @@ qlt_send_first_logo(struct scsi_qla_host *vha, qlt_port_logo_t *logo)
logo->cmd_count, res);
}
-static void qlt_free_session_done(struct work_struct *work)
+void qlt_free_session_done(struct work_struct *work)
{
struct fc_port *sess = container_of(work, struct fc_port,
free_work);
@@ -1169,11 +1169,14 @@ void qlt_unreg_sess(struct fc_port *sess)
sess->last_rscn_gen = sess->rscn_gen;
sess->last_login_gen = sess->login_gen;
- if (sess->nvme_flag & NVME_FLAG_REGISTERED)
+ if (sess->nvme_flag & NVME_FLAG_REGISTERED &&
+ !(sess->nvme_flag & NVME_FLAG_DELETING)) {
+ sess->nvme_flag |= NVME_FLAG_DELETING;
schedule_work(&sess->nvme_del_work);
-
- INIT_WORK(&sess->free_work, qlt_free_session_done);
- schedule_work(&sess->free_work);
+ } else {
+ INIT_WORK(&sess->free_work, qlt_free_session_done);
+ schedule_work(&sess->free_work);
+ }
}
EXPORT_SYMBOL(qlt_unreg_sess);
diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
index bb67b5a284a8..728ce74358e7 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -1016,7 +1016,7 @@ extern void qlt_fc_port_deleted(struct scsi_qla_host *, fc_port_t *, int);
extern int __init qlt_init(void);
extern void qlt_exit(void);
extern void qlt_update_vp_map(struct scsi_qla_host *, int);
-
+extern void qlt_free_session_done(struct work_struct *);
/*
* This macro is used during early initializations when host->active_mode
* is not set. Right now, ha value is ignored.
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 04/13] qla2xxx: Restore ZIO threshold setting
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (2 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 03/13] qla2xxx: Add changes for devloss timeout in driver Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:15 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 05/13] qla2xxx: Add FC-NVMe abort processing Himanshu Madhani
` (8 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_nvme.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index a8e81fc14c44..5ee447680ddd 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -464,11 +464,6 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
/* Set chip new ring index. */
WRT_REG_DWORD(req->req_q_in, req->ring_index);
- /* Manage unprocessed RIO/ZIO commands in response queue. */
- if (vha->flags.process_response_queue &&
- rsp->ring_ptr->signature != RESPONSE_PROCESSED)
- qla24xx_process_response_queue(vha, rsp);
-
queuing_error:
spin_unlock_irqrestore(&qpair->qp_lock, flags);
return rval;
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 05/13] qla2xxx: Add FC-NVMe abort processing
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (3 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 04/13] qla2xxx: Restore ZIO threshold setting Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:16 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 06/13] qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change Himanshu Madhani
` (7 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_nvme.c | 36 ++++++++++++++++++------------------
drivers/scsi/qla2xxx/qla_nvme.h | 1 +
2 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 5ee447680ddd..951fbbab961f 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -181,24 +181,32 @@ static void qla_nvme_sp_done(void *ptr, int res)
return;
}
-static void qla_nvme_ls_abort(struct nvme_fc_local_port *lport,
- struct nvme_fc_remote_port *rport, struct nvmefc_ls_req *fd)
+static void qla_nvme_abort_work(struct work_struct *work)
{
- struct nvme_private *priv = fd->private;
- struct qla_nvme_rport *qla_rport = rport->private;
- fc_port_t *fcport = qla_rport->fcport;
+ struct nvme_private *priv =
+ container_of(work, struct nvme_private, abort_work);
srb_t *sp = priv->sp;
- int rval;
+ fc_port_t *fcport = sp->fcport;
struct qla_hw_data *ha = fcport->vha->hw;
+ int rval;
rval = ha->isp_ops->abort_command(sp);
ql_dbg(ql_dbg_io, fcport->vha, 0x212b,
- "%s: %s LS command for sp=%p on fcport=%p rval=%x\n", __func__,
+ "%s: %s command for sp=%p on fcport=%p rval=%x\n", __func__,
(rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
sp, fcport, rval);
}
+static void qla_nvme_ls_abort(struct nvme_fc_local_port *lport,
+ struct nvme_fc_remote_port *rport, struct nvmefc_ls_req *fd)
+{
+ struct nvme_private *priv = fd->private;
+
+ INIT_WORK(&priv->abort_work, qla_nvme_abort_work);
+ schedule_work(&priv->abort_work);
+}
+
static void qla_nvme_ls_complete(struct work_struct *work)
{
struct nvme_private *priv =
@@ -264,18 +272,9 @@ static void qla_nvme_fcp_abort(struct nvme_fc_local_port *lport,
struct nvmefc_fcp_req *fd)
{
struct nvme_private *priv = fd->private;
- srb_t *sp = priv->sp;
- int rval;
- struct qla_nvme_rport *qla_rport = rport->private;
- fc_port_t *fcport = qla_rport->fcport;
- struct qla_hw_data *ha = fcport->vha->hw;
-
- rval = ha->isp_ops->abort_command(sp);
- ql_dbg(ql_dbg_io, fcport->vha, 0x2127,
- "%s: %s command for sp=%p on fcport=%p rval=%x\n", __func__,
- (rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
- sp, fcport, rval);
+ INIT_WORK(&priv->abort_work, qla_nvme_abort_work);
+ schedule_work(&priv->abort_work);
}
static void qla_nvme_poll(struct nvme_fc_local_port *lport, void *hw_queue_handle)
@@ -650,6 +649,7 @@ void qla_nvme_delete(struct scsi_qla_host *vha)
ql_log(ql_log_info, fcport->vha, 0x2114, "%s: fcport=%p\n",
__func__, fcport);
+ nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, 0);
init_completion(&fcport->nvme_del_done);
nvme_fc_unregister_remoteport(fcport->nvme_remote_port);
wait_for_completion(&fcport->nvme_del_done);
diff --git a/drivers/scsi/qla2xxx/qla_nvme.h b/drivers/scsi/qla2xxx/qla_nvme.h
index 7becfc1b3e69..8df379478269 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.h
+++ b/drivers/scsi/qla2xxx/qla_nvme.h
@@ -31,6 +31,7 @@ struct nvme_private {
struct srb *sp;
struct nvmefc_ls_req *fd;
struct work_struct ls_work;
+ struct work_struct abort_work;
int comp_status;
};
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 06/13] qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (4 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 05/13] qla2xxx: Add FC-NVMe abort processing Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:33 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 07/13] qla2xxx: Return busy if rport going away Himanshu Madhani
` (6 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_def.h | 2 --
drivers/scsi/qla2xxx/qla_isr.c | 3 ---
drivers/scsi/qla2xxx/qla_mbx.c | 3 +++
3 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 737492048d8a..745e6414b496 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -4282,8 +4282,6 @@ typedef struct scsi_qla_host {
struct nvme_fc_local_port *nvme_local_port;
struct completion nvme_del_done;
struct list_head nvme_rport_list;
- atomic_t nvme_active_aen_cnt;
- uint16_t nvme_last_rptd_aen;
uint16_t fcoe_vlan_id;
uint16_t fcoe_fcf_idx;
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 011261a9d585..d973d0b5d8c3 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -768,7 +768,6 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
case MBA_LIP_OCCURRED: /* Loop Initialization Procedure */
ha->flags.lip_ae = 1;
- ha->flags.n2n_ae = 0;
ql_dbg(ql_dbg_async, vha, 0x5009,
"LIP occurred (%x).\n", mb[1]);
@@ -812,7 +811,6 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
case MBA_LOOP_DOWN: /* Loop Down Event */
SAVE_TOPO(ha);
- ha->flags.n2n_ae = 0;
ha->flags.lip_ae = 0;
ha->current_topology = 0;
@@ -886,7 +884,6 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
/* case MBA_DCBX_COMPLETE: */
case MBA_POINT_TO_POINT: /* Point-to-Point */
ha->flags.lip_ae = 0;
- ha->flags.n2n_ae = 1;
if (IS_QLA2100(ha))
break;
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 41b0ee47c6a1..735079ba691c 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -3747,6 +3747,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
id.b.area = rptid_entry->port_id[1];
id.b.al_pa = rptid_entry->port_id[0];
id.b.rsvd_1 = 0;
+ ha->flags.n2n_ae = 0;
if (rptid_entry->format == 0) {
/* loop */
@@ -3799,6 +3800,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
set_bit(N2N_LOGIN_NEEDED, &vha->dpc_flags);
set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags);
set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
+ ha->flags.n2n_ae = 1;
return;
}
@@ -3875,6 +3877,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
vha->d_id.b.area = rptid_entry->port_id[1];
vha->d_id.b.al_pa = rptid_entry->port_id[0];
+ ha->flags.n2n_ae = 1;
spin_lock_irqsave(&ha->vport_slock, flags);
qlt_update_vp_map(vha, SET_AL_PA);
spin_unlock_irqrestore(&ha->vport_slock, flags);
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 07/13] qla2xxx: Return busy if rport going away
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (5 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 06/13] qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:34 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 08/13] qla2xxx: Remove nvme_done_list Himanshu Madhani
` (5 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
This patch adds mechanism to retur EBUSY if rport is going away
to prevent exhausting FC-NVMe layer's retry counter.
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_def.h | 1 +
drivers/scsi/qla2xxx/qla_isr.c | 4 +++-
drivers/scsi/qla2xxx/qla_nvme.c | 31 ++++++++++++++++++++-----------
3 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 745e6414b496..944626cc84d9 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2357,6 +2357,7 @@ typedef struct fc_port {
uint8_t nvme_flag;
#define NVME_FLAG_REGISTERED 4
#define NVME_FLAG_DELETING 2
+#define NVME_FLAG_RESETTING 1
struct fc_port *conflict;
unsigned char logout_completed;
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index d973d0b5d8c3..07c98eb911fd 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1911,9 +1911,11 @@ qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
ret = QLA_SUCCESS;
break;
- case CS_ABORTED:
case CS_RESET:
case CS_PORT_UNAVAILABLE:
+ fcport->nvme_flag |= NVME_FLAG_RESETTING;
+ /* fall through */
+ case CS_ABORTED:
case CS_PORT_LOGGED_OUT:
case CS_PORT_BUSY:
ql_log(ql_log_warn, fcport->vha, 0x5060,
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 951fbbab961f..adeda6a4e4fd 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -36,6 +36,7 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
return 0;
INIT_WORK(&fcport->nvme_del_work, qla_nvme_unregister_remote_port);
+ fcport->nvme_flag &= ~NVME_FLAG_RESETTING;
memset(&req, 0, sizeof(struct nvme_fc_port_info));
req.port_name = wwn_to_u64(fcport->port_name);
@@ -193,9 +194,9 @@ static void qla_nvme_abort_work(struct work_struct *work)
rval = ha->isp_ops->abort_command(sp);
ql_dbg(ql_dbg_io, fcport->vha, 0x212b,
- "%s: %s command for sp=%p on fcport=%p rval=%x\n", __func__,
- (rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
- sp, fcport, rval);
+ "%s: %s command for sp=%p, handle=%x on fcport=%p rval=%x\n",
+ __func__, (rval != QLA_SUCCESS) ? "Failed to abort" : "Aborted",
+ sp, sp->handle, fcport, rval);
}
static void qla_nvme_ls_abort(struct nvme_fc_local_port *lport,
@@ -327,7 +328,7 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
}
if (index == req->num_outstanding_cmds) {
- rval = -1;
+ rval = -EBUSY;
goto queuing_error;
}
req_cnt = qla24xx_calc_iocbs(vha, tot_dsds);
@@ -341,7 +342,7 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
req->cnt = req->length - (req->ring_index - cnt);
if (req->cnt < (req_cnt + 2)){
- rval = -1;
+ rval = -EBUSY;
goto queuing_error;
}
}
@@ -476,14 +477,15 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
fc_port_t *fcport;
struct srb_iocb *nvme;
struct scsi_qla_host *vha;
- int rval = QLA_FUNCTION_FAILED;
+ int rval = -ENODEV;
srb_t *sp;
struct qla_qpair *qpair = hw_queue_handle;
struct nvme_private *priv;
struct qla_nvme_rport *qla_rport = rport->private;
- if (!fd) {
- ql_log(ql_log_warn, NULL, 0x2134, "NO NVMe FCP request\n");
+ if (!fd || !qpair) {
+ ql_log(ql_log_warn, NULL, 0x2134,
+ "NO NVMe request or Queue Handle\n");
return rval;
}
@@ -495,13 +497,21 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
}
vha = fcport->vha;
- if (!qpair)
+
+ /*
+ * If we know the dev is going away while the transport is still sending
+ * IO's return busy back to stall the IO Q. This happens when the
+ * link goes away and fw hasn't notified us yet, but IO's are being
+ * returned. If the dev comes back quickly we won't exhaust the IO
+ * retry count at the core.
+ */
+ if (fcport->nvme_flag & NVME_FLAG_RESETTING)
return -EBUSY;
/* Alloc SRB structure */
sp = qla2xxx_get_qpair_sp(qpair, fcport, GFP_ATOMIC);
if (!sp)
- return -EIO;
+ return -EBUSY;
atomic_set(&sp->ref_count, 1);
init_waitqueue_head(&sp->nvme_ls_waitq);
@@ -519,7 +529,6 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
"qla2x00_start_nvme_mq failed = %d\n", rval);
atomic_dec(&sp->ref_count);
wake_up(&sp->nvme_ls_waitq);
- return -EIO;
}
return rval;
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 08/13] qla2xxx: Remove nvme_done_list
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (6 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 07/13] qla2xxx: Return busy if rport going away Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:35 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 09/13] qla2xxx: Fix retry for PRLI RJT with reason of BUSY Himanshu Madhani
` (4 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_def.h | 1 -
drivers/scsi/qla2xxx/qla_gbl.h | 2 --
drivers/scsi/qla2xxx/qla_init.c | 1 -
drivers/scsi/qla2xxx/qla_mid.c | 6 ------
drivers/scsi/qla2xxx/qla_nvme.c | 13 ++-----------
drivers/scsi/qla2xxx/qla_os.c | 1 -
6 files changed, 2 insertions(+), 22 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 944626cc84d9..576b72bef01d 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -3465,7 +3465,6 @@ struct qla_qpair {
struct work_struct q_work;
struct list_head qp_list_elem; /* vha->qp_list */
struct list_head hints_list;
- struct list_head nvme_done_list;
uint16_t cpuid;
struct qla_tgt_counters tgt_counters;
};
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index e9295398050c..19f44e12926b 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -896,6 +896,4 @@ void qlt_update_host_map(struct scsi_qla_host *, port_id_t);
void qlt_remove_target_resources(struct qla_hw_data *);
void qlt_clr_qp_table(struct scsi_qla_host *vha);
-void qla_nvme_cmpl_io(struct srb_iocb *);
-
#endif /* _QLA_GBL_H */
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index dec3e2cdaffa..0805483645d7 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -8408,7 +8408,6 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos,
qpair->vp_idx = vp_idx;
qpair->fw_started = ha->flags.fw_started;
INIT_LIST_HEAD(&qpair->hints_list);
- INIT_LIST_HEAD(&qpair->nvme_done_list);
qpair->chip_reset = ha->base_qpair->chip_reset;
qpair->enable_class_2 = ha->base_qpair->enable_class_2;
qpair->enable_explicit_conf =
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index e965b16f21e3..da85cd89639f 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -778,18 +778,12 @@ static void qla_do_work(struct work_struct *work)
struct qla_qpair *qpair = container_of(work, struct qla_qpair, q_work);
struct scsi_qla_host *vha;
struct qla_hw_data *ha = qpair->hw;
- struct srb_iocb *nvme, *nxt_nvme;
spin_lock_irqsave(&qpair->qp_lock, flags);
vha = pci_get_drvdata(ha->pdev);
qla24xx_process_response_queue(vha, qpair->rsp);
spin_unlock_irqrestore(&qpair->qp_lock, flags);
- list_for_each_entry_safe(nvme, nxt_nvme, &qpair->nvme_done_list,
- u.nvme.entry) {
- list_del_init(&nvme->u.nvme.entry);
- qla_nvme_cmpl_io(nvme);
- }
}
/* create response queue */
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index adeda6a4e4fd..8c05df30c083 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -149,16 +149,6 @@ static void qla_nvme_sp_ls_done(void *ptr, int res)
qla2x00_rel_sp(sp);
}
-void qla_nvme_cmpl_io(struct srb_iocb *nvme)
-{
- srb_t *sp;
- struct nvmefc_fcp_req *fd = nvme->u.nvme.desc;
-
- sp = container_of(nvme, srb_t, u.iocb_cmd);
- fd->done(fd);
- qla2xxx_rel_qpair_sp(sp->qpair, sp);
-}
-
static void qla_nvme_sp_done(void *ptr, int res)
{
srb_t *sp = ptr;
@@ -177,7 +167,8 @@ static void qla_nvme_sp_done(void *ptr, int res)
fd->status = NVME_SC_INTERNAL;
fd->rcv_rsplen = nvme->u.nvme.rsp_pyld_len;
- list_add_tail(&nvme->u.nvme.entry, &sp->qpair->nvme_done_list);
+ fd->done(fd);
+ qla2xxx_rel_qpair_sp(sp->qpair, sp);
return;
}
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 5c5dcca4d1da..69b46c8b9dd2 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -397,7 +397,6 @@ static void qla_init_base_qpair(struct scsi_qla_host *vha, struct req_que *req,
ha->base_qpair->use_shadow_reg = IS_SHADOW_REG_CAPABLE(ha) ? 1 : 0;
ha->base_qpair->msix = &ha->msix_entries[QLA_MSIX_RSP_Q];
INIT_LIST_HEAD(&ha->base_qpair->hints_list);
- INIT_LIST_HEAD(&ha->base_qpair->nvme_done_list);
ha->base_qpair->enable_class_2 = ql2xenableclass2;
/* init qpair to this cpu. Will adjust at run time. */
qla_cpu_update(rsp->qpair, raw_smp_processor_id());
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 09/13] qla2xxx: Fix retry for PRLI RJT with reason of BUSY
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (7 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 08/13] qla2xxx: Remove nvme_done_list Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:36 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 10/13] qla2xxx: Fix FC-NVMe IO abort during driver reset Himanshu Madhani
` (3 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_dbg.c | 2 +-
drivers/scsi/qla2xxx/qla_init.c | 13 ++++++++++++-
drivers/scsi/qla2xxx/qla_mbx.c | 7 +++++--
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 7e9d8f08b9d5..1abc8a9064b3 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -60,7 +60,7 @@
* | | | 0xb13c-0xb140 |
* | | | 0xb149 |
* | MultiQ | 0xc010 | |
- * | Misc | 0xd302 | 0xd031-0xd0ff |
+ * | Misc | 0xd303 | 0xd031-0xd0ff |
* | | | 0xd101-0xd1fe |
* | | | 0xd214-0xd2fe |
* | Target Mode | 0xe081 | |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 0805483645d7..5520477a66d9 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -875,7 +875,6 @@ qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport)
return rval;
if (fcport->fw_login_state == DSC_LS_PLOGI_PEND ||
- fcport->fw_login_state == DSC_LS_PLOGI_COMP ||
fcport->fw_login_state == DSC_LS_PRLI_PEND)
return rval;
@@ -1240,6 +1239,11 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
qla2x00_post_async_adisc_work(vha, fcport, data);
break;
+ case DSC_LOGIN_PEND:
+ if (fcport->fw_login_state == DSC_LS_PLOGI_COMP)
+ qla24xx_post_prli_work(vha, fcport);
+ break;
+
default:
break;
}
@@ -1643,6 +1647,13 @@ qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
qla24xx_post_gpdb_work(vha, ea->fcport, 0);
break;
default:
+ if ((ea->iop[0] == LSC_SCODE_ELS_REJECT) &&
+ (ea->iop[1] == 0x50000)) { /* reson 5=busy expl:0x0 */
+ set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
+ ea->fcport->fw_login_state = DSC_LS_PLOGI_COMP;
+ break;
+ }
+
if (ea->fcport->n2n_flag) {
ql_dbg(ql_dbg_disc, vha, 0x2118,
"%s %d %8phC post fc4 prli\n",
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 735079ba691c..c9a134ae0d2b 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -1025,9 +1025,12 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
* FW supports nvme and driver load parameter requested nvme.
* BIT 26 of fw_attributes indicates NVMe support.
*/
- if ((ha->fw_attributes_h & 0x400) && ql2xnvmeenable)
+ if ((ha->fw_attributes_h & 0x400) && ql2xnvmeenable) {
vha->flags.nvme_enabled = 1;
-
+ ql_log(ql_log_info, vha, 0xd302,
+ "%s: FC-NVMe is Enabled (0x%x)\n",
+ __func__, ha->fw_attributes_h);
+ }
}
if (IS_QLA27XX(ha)) {
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 10/13] qla2xxx: Fix FC-NVMe IO abort during driver reset
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (8 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 09/13] qla2xxx: Fix retry for PRLI RJT with reason of BUSY Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:38 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 11/13] qla2xxx: Cleanup code to improve FC-NVMe error handling Himanshu Madhani
` (2 subsequent siblings)
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_nvme.c | 17 ++++++++++++-----
drivers/scsi/qla2xxx/qla_nvme.h | 2 +-
drivers/scsi/qla2xxx/qla_os.c | 2 +-
3 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 8c05df30c083..57275bc9fe14 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -489,6 +489,9 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
vha = fcport->vha;
+ if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags))
+ return rval;
+
/*
* If we know the dev is going away while the transport is still sending
* IO's return busy back to stall the IO Q. This happens when the
@@ -597,14 +600,18 @@ static int qla_nvme_wait_on_command(srb_t *sp)
return ret;
}
-void qla_nvme_abort(struct qla_hw_data *ha, struct srb *sp)
+void qla_nvme_abort(struct qla_hw_data *ha, struct srb *sp, int res)
{
int rval;
- rval = ha->isp_ops->abort_command(sp);
- if (!rval && !qla_nvme_wait_on_command(sp))
- ql_log(ql_log_warn, NULL, 0x2112,
- "nvme_wait_on_comand timed out waiting on sp=%p\n", sp);
+ if (!test_bit(ABORT_ISP_ACTIVE, &sp->vha->dpc_flags)) {
+ rval = ha->isp_ops->abort_command(sp);
+ if (!rval && !qla_nvme_wait_on_command(sp))
+ ql_log(ql_log_warn, NULL, 0x2112,
+ "timed out waiting on sp=%p\n", sp);
+ } else {
+ sp->done(sp, res);
+ }
}
static void qla_nvme_unregister_remote_port(struct work_struct *work)
diff --git a/drivers/scsi/qla2xxx/qla_nvme.h b/drivers/scsi/qla2xxx/qla_nvme.h
index 8df379478269..816854ada654 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.h
+++ b/drivers/scsi/qla2xxx/qla_nvme.h
@@ -145,7 +145,7 @@ struct pt_ls4_rx_unsol {
void qla_nvme_register_hba(struct scsi_qla_host *);
int qla_nvme_register_remote(struct scsi_qla_host *, struct fc_port *);
void qla_nvme_delete(struct scsi_qla_host *);
-void qla_nvme_abort(struct qla_hw_data *, struct srb *sp);
+void qla_nvme_abort(struct qla_hw_data *, struct srb *sp, int res);
void qla24xx_nvme_ls4_iocb(struct scsi_qla_host *, struct pt_ls4_request *,
struct req_que *);
void qla24xx_async_gffid_sp_done(void *, int);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 69b46c8b9dd2..7fe265aca617 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1743,7 +1743,7 @@ __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)
sp_get(sp);
spin_unlock_irqrestore(qp->qp_lock_ptr,
flags);
- qla_nvme_abort(ha, sp);
+ qla_nvme_abort(ha, sp, res);
spin_lock_irqsave(qp->qp_lock_ptr,
flags);
} else if (GET_CMD_SP(sp) &&
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 11/13] qla2xxx: Cleanup code to improve FC-NVMe error handling
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (9 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 10/13] qla2xxx: Fix FC-NVMe IO abort during driver reset Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-14 11:40 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan Himanshu Madhani
2018-03-12 18:16 ` [PATCH 13/13] qla2xxx: Update driver version to 10.00.00.06-k Himanshu Madhani
12 siblings, 1 reply; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Darren Trapp <darren.trapp@cavium.com>
Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_isr.c | 78 +++++++++++++++--------------------------
drivers/scsi/qla2xxx/qla_nvme.c | 2 +-
2 files changed, 29 insertions(+), 51 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 07c98eb911fd..7cacdc3408fa 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1838,31 +1838,23 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
sp->done(sp, 0);
}
-static void
-qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
+static void qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
+ void *tsk, srb_t *sp)
{
- const char func[] = "NVME-IOCB";
fc_port_t *fcport;
- srb_t *sp;
struct srb_iocb *iocb;
struct sts_entry_24xx *sts = (struct sts_entry_24xx *)tsk;
uint16_t state_flags;
struct nvmefc_fcp_req *fd;
uint16_t ret = 0;
- struct srb_iocb *nvme;
-
- sp = qla2x00_get_sp_from_handle(vha, func, req, tsk);
- if (!sp)
- return;
iocb = &sp->u.iocb_cmd;
fcport = sp->fcport;
iocb->u.nvme.comp_status = le16_to_cpu(sts->comp_status);
state_flags = le16_to_cpu(sts->state_flags);
fd = iocb->u.nvme.desc;
- nvme = &sp->u.iocb_cmd;
- if (unlikely(nvme->u.nvme.aen_op))
+ if (unlikely(iocb->u.nvme.aen_op))
atomic_dec(&sp->vha->hw->nvme_active_aen_cnt);
/*
@@ -1896,45 +1888,30 @@ qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
fd->transferred_length = fd->payload_length -
le32_to_cpu(sts->residual_len);
- /*
- * If transport error then Failure (HBA rejects request)
- * otherwise transport will handle.
- */
- if (sts->entry_status) {
- ql_log(ql_log_warn, fcport->vha, 0x5038,
- "NVME-%s error - hdl=%x entry-status(%x).\n",
- sp->name, sp->handle, sts->entry_status);
+ switch (le16_to_cpu(sts->comp_status)) {
+ case CS_COMPLETE:
+ ret = QLA_SUCCESS;
+ break;
+ case CS_ABORTED:
+ case CS_RESET:
+ case CS_PORT_UNAVAILABLE:
+ case CS_PORT_LOGGED_OUT:
+ case CS_PORT_BUSY:
+ ql_log(ql_log_warn, fcport->vha, 0x5060,
+ "NVME-%s ERR Handling - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
+ sp->name, sp->handle, sts->comp_status,
+ le32_to_cpu(sts->residual_len), sts->ox_id);
+ fd->transferred_length = 0;
+ iocb->u.nvme.rsp_pyld_len = 0;
+ ret = QLA_ABORTED;
+ break;
+ default:
+ ql_log(ql_log_warn, fcport->vha, 0x5060,
+ "NVME-%s error - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
+ sp->name, sp->handle, sts->comp_status,
+ le32_to_cpu(sts->residual_len), sts->ox_id);
ret = QLA_FUNCTION_FAILED;
- } else {
- switch (le16_to_cpu(sts->comp_status)) {
- case CS_COMPLETE:
- ret = QLA_SUCCESS;
- break;
-
- case CS_RESET:
- case CS_PORT_UNAVAILABLE:
- fcport->nvme_flag |= NVME_FLAG_RESETTING;
- /* fall through */
- case CS_ABORTED:
- case CS_PORT_LOGGED_OUT:
- case CS_PORT_BUSY:
- ql_log(ql_log_warn, fcport->vha, 0x5060,
- "NVME-%s ERR Handling - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
- sp->name, sp->handle, sts->comp_status,
- le32_to_cpu(sts->residual_len), sts->ox_id);
- fd->transferred_length = 0;
- iocb->u.nvme.rsp_pyld_len = 0;
- ret = QLA_ABORTED;
- break;
-
- default:
- ql_log(ql_log_warn, fcport->vha, 0x5060,
- "NVME-%s error - hdl=%x completion status(%x) resid=%x ox_id=%x\n",
- sp->name, sp->handle, sts->comp_status,
- le32_to_cpu(sts->residual_len), sts->ox_id);
- ret = QLA_FUNCTION_FAILED;
- break;
- }
+ break;
}
sp->done(sp, ret);
}
@@ -2462,7 +2439,8 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
/* NVME completion. */
if (sp->type == SRB_NVME_CMD) {
- qla24xx_nvme_iocb_entry(vha, req, pkt);
+ req->outstanding_cmds[handle] = NULL;
+ qla24xx_nvme_iocb_entry(vha, req, pkt, sp);
return;
}
diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
index 57275bc9fe14..c5a963c2c86e 100644
--- a/drivers/scsi/qla2xxx/qla_nvme.c
+++ b/drivers/scsi/qla2xxx/qla_nvme.c
@@ -280,7 +280,7 @@ static void qla_nvme_poll(struct nvme_fc_local_port *lport, void *hw_queue_handl
spin_unlock_irqrestore(&qpair->qp_lock, flags);
}
-static int qla2x00_start_nvme_mq(srb_t *sp)
+static inline int qla2x00_start_nvme_mq(srb_t *sp)
{
unsigned long flags;
uint32_t *clr_ptr;
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (10 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 11/13] qla2xxx: Cleanup code to improve FC-NVMe error handling Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
2018-03-12 22:48 ` kbuild test robot
2018-03-14 11:43 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 13/13] qla2xxx: Update driver version to 10.00.00.06-k Himanshu Madhani
12 siblings, 2 replies; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
From: Quinn Tran <quinn.tran@cavium.com>
This patch combines FCP and FC-NVMe scan into single scan when
driver detects FC-NVMe capability on same port.
Signed-off-by: Quinn Tran <quinn.tran at cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_def.h | 7 ++
drivers/scsi/qla2xxx/qla_gbl.h | 2 +-
drivers/scsi/qla2xxx/qla_gs.c | 231 ++++++++++++++++++++++++++++++++--------
drivers/scsi/qla2xxx/qla_init.c | 8 +-
drivers/scsi/qla2xxx/qla_os.c | 8 +-
5 files changed, 204 insertions(+), 52 deletions(-)
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 576b72bef01d..eb2ec1fb07cb 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2983,8 +2983,14 @@ enum scan_flags_t {
SF_QUEUED = BIT_1,
};
+enum fc4type_t {
+ FS_FC4TYPE_FCP = BIT_0,
+ FS_FC4TYPE_NVME = BIT_1,
+};
+
struct fab_scan_rp {
port_id_t id;
+ enum fc4type_t fc4type;
u8 port_name[8];
u8 node_name[8];
};
@@ -3276,6 +3282,7 @@ struct qla_work_evt {
} nack;
struct {
u8 fc4_type;
+ srb_t *sp;
} gpnft;
} u;
};
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 19f44e12926b..3c4c84ed0f0f 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -658,7 +658,7 @@ void qla24xx_handle_gpsc_event(scsi_qla_host_t *, struct event_arg *);
int qla2x00_mgmt_svr_login(scsi_qla_host_t *);
void qla24xx_handle_gffid_event(scsi_qla_host_t *vha, struct event_arg *ea);
int qla24xx_async_gffid(scsi_qla_host_t *vha, fc_port_t *fcport);
-int qla24xx_async_gpnft(scsi_qla_host_t *, u8);
+int qla24xx_async_gpnft(scsi_qla_host_t *, u8, srb_t *);
void qla24xx_async_gpnft_done(scsi_qla_host_t *, srb_t *);
void qla24xx_async_gnnft_done(scsi_qla_host_t *, srb_t *);
int qla24xx_async_gnnid(scsi_qla_host_t *, fc_port_t *);
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index e6bb78e6f1d4..a7dfdef460cf 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3860,7 +3860,6 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
fc_port_t *fcport;
u32 i, rc;
bool found;
- u8 fc4type = sp->gen2;
struct fab_scan_rp *rp;
unsigned long flags;
@@ -3933,7 +3932,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
"%s %d %8phC post new sess\n",
__func__, __LINE__, rp->port_name);
qla24xx_post_newsess_work(vha, &rp->id, rp->port_name,
- rp->node_name, NULL, fc4type);
+ rp->node_name, NULL, rp->fc4type);
}
}
@@ -3972,8 +3971,6 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
vha->scan.scan_flags &= ~SF_SCANNING;
spin_unlock_irqrestore(&vha->work_lock, flags);
- if ((fc4type == FC4_TYPE_FCP_SCSI) && vha->flags.nvme_enabled)
- qla24xx_async_gpnft(vha, FC4_TYPE_NVME);
}
static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
@@ -3989,6 +3986,9 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
struct fab_scan_rp *rp;
int i, j, k;
u16 cmd = be16_to_cpu(ct_req->command);
+ u8 fc4_type = sp->gen2;
+ u8 found;
+ unsigned long flags;
/* gen2 field is holding the fc4type */
ql_dbg(ql_dbg_disc, vha, 0xffff,
@@ -4033,25 +4033,127 @@ static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
if (id.b24 == 0 || wwn == 0)
continue;
- if (cmd == GPN_FT_CMD) {
- rp = &vha->scan.l[j];
- rp->id = id;
- memcpy(rp->port_name, d->port_name, 8);
- j++;
- } else {/* GNN_FT_CMD */
- for (k = 0; k < vha->hw->max_fibre_devices;
- k++) {
- rp = &vha->scan.l[k];
- if (id.b24 == rp->id.b24) {
- memcpy(rp->node_name,
+ if (fc4_type == FC4_TYPE_FCP_SCSI) {
+ if (cmd == GPN_FT_CMD) {
+ rp = &vha->scan.l[j];
+ rp->id = id;
+ memcpy(rp->port_name, d->port_name, 8);
+ j++;
+ rp->fc4type = FS_FC4TYPE_FCP;
+ } else {/* GNN_FT_CMD */
+ for (k = 0;
+ k < vha->hw->max_fibre_devices;
+ k++) {
+ rp = &vha->scan.l[k];
+ if (id.b24 == rp->id.b24) {
+ memcpy(rp->node_name,
+ d->port_name, 8);
+ break;
+ }
+ }
+ }
+ } else { /* FC4_TYPE_NVME */
+ if (cmd == GPN_FT_CMD) {
+ found = 0;
+ for (k = 0;
+ k < vha->hw->max_fibre_devices;
+ k++) {
+ rp = &vha->scan.l[k];
+ if (!memcmp(rp->port_name,
+ d->port_name, 8)) {
+ /*
+ * This remote port
+ * supports NVME & FCP
+ */
+ rp->fc4type |=
+ FS_FC4TYPE_NVME;
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ /* find free slot */
+ for (k = 0;
+ k < vha->hw->max_fibre_devices;
+ k++) {
+ rp = &vha->scan.l[k];
+ if (wwn_to_u64
+ (rp->port_name))
+ continue;
+ else
+ /*
+ * found free
+ * slot
+ */
+ break;
+ }
+
+ rp->id = id;
+ memcpy(rp->port_name,
d->port_name, 8);
- break;
+ rp->fc4type |= FS_FC4TYPE_NVME;
+ }
+
+ } else {/* GNN_FT_CMD */
+ for (k = 0;
+ k < vha->hw->max_fibre_devices;
+ k++) {
+ rp = &vha->scan.l[k];
+ if (id.b24 == rp->id.b24) {
+ memcpy(rp->node_name,
+ d->port_name, 8);
+ break;
+ }
}
}
}
}
}
+ if ((fc4_type == FC4_TYPE_FCP_SCSI) && vha->flags.nvme_enabled &&
+ cmd == GNN_FT_CMD) {
+ del_timer(&sp->u.iocb_cmd.timer);
+ spin_lock_irqsave(&vha->work_lock, flags);
+ vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
+
+ e = qla2x00_alloc_work(vha, QLA_EVT_GPNFT);
+ if (!e) {
+ /*
+ * please ignore kernel warning. Otherwise,
+ * we have mem leak.
+ */
+ if (sp->u.iocb_cmd.u.ctarg.req) {
+ dma_free_coherent(&vha->hw->pdev->dev,
+ sizeof(struct ct_sns_pkt),
+ sp->u.iocb_cmd.u.ctarg.req,
+ sp->u.iocb_cmd.u.ctarg.req_dma);
+ sp->u.iocb_cmd.u.ctarg.req = NULL;
+ }
+ if (sp->u.iocb_cmd.u.ctarg.rsp) {
+ dma_free_coherent(&vha->hw->pdev->dev,
+ sizeof(struct ct_sns_pkt),
+ sp->u.iocb_cmd.u.ctarg.rsp,
+ sp->u.iocb_cmd.u.ctarg.rsp_dma);
+ sp->u.iocb_cmd.u.ctarg.rsp = NULL;
+ }
+
+ ql_dbg(ql_dbg_disc, vha, 0xffff,
+ "Async done-%s unable to alloc work element\n",
+ sp->name);
+ sp->free(sp);
+ set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
+ set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
+ return;
+ }
+ e->u.gpnft.fc4_type = FC4_TYPE_NVME;
+ sp->rc = res;
+ e->u.gpnft.sp = sp;
+
+ qla2x00_post_work(vha, e);
+ return;
+ }
+
if (cmd == GPN_FT_CMD)
e = qla2x00_alloc_work(vha, QLA_EVT_GPNFT_DONE);
else
@@ -4100,9 +4202,12 @@ static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp,
int rval = QLA_FUNCTION_FAILED;
struct ct_sns_req *ct_req;
struct ct_sns_pkt *ct_sns;
+ unsigned long flags;
if (!vha->flags.online) {
+ spin_lock_irqsave(&vha->work_lock, flags);
vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
goto done_free_sp;
}
@@ -4111,10 +4216,18 @@ static int qla24xx_async_gnnft(scsi_qla_host_t *vha, struct srb *sp,
"%s: req %p rsp %p are not setup\n",
__func__, sp->u.iocb_cmd.u.ctarg.req,
sp->u.iocb_cmd.u.ctarg.rsp);
+ spin_lock_irqsave(&vha->work_lock, flags);
vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
WARN_ON(1);
goto done_free_sp;
}
+
+ ql_dbg(ql_dbg_disc, vha, 0xfffff,
+ "%s: FC4Type %x, CT-PASSTRHU %s command ctarg rsp size %d, ctarg req size %d\n",
+ __func__, fc4_type, sp->name, sp->u.iocb_cmd.u.ctarg.rsp_size,
+ sp->u.iocb_cmd.u.ctarg.req_size);
+
sp->type = SRB_CT_PTHRU_CMD;
sp->name = "gnnft";
sp->gen1 = vha->hw->base_qpair->chip_reset;
@@ -4177,15 +4290,17 @@ void qla24xx_async_gpnft_done(scsi_qla_host_t *vha, srb_t *sp)
}
/* Get WWPN list for certain fc4_type */
-int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type)
+int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
{
int rval = QLA_FUNCTION_FAILED;
struct ct_sns_req *ct_req;
- srb_t *sp;
struct ct_sns_pkt *ct_sns;
u32 rspsz;
unsigned long flags;
+ ql_dbg(ql_dbg_disc, vha, 0xffff,
+ "%s enter\n", __func__);
+
if (!vha->flags.online)
return rval;
@@ -4198,9 +4313,58 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type)
vha->scan.scan_flags |= SF_SCANNING;
spin_unlock_irqrestore(&vha->work_lock, flags);
- sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
- if (!sp) {
- vha->scan.scan_flags &= ~SF_SCANNING;
+ if (fc4_type == FC4_TYPE_FCP_SCSI) {
+ ql_dbg(ql_dbg_disc, vha, 0xffff,
+ "%s: Performing FCP Scan\n", __func__);
+
+ if (sp)
+ sp->free(sp); /* should not happen */
+
+ sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
+ if (!sp) {
+ spin_lock_irqsave(&vha->work_lock, flags);
+ vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
+ return rval;
+ }
+
+ sp->u.iocb_cmd.u.ctarg.req = dma_zalloc_coherent(
+ &vha->hw->pdev->dev, sizeof(struct ct_sns_pkt),
+ &sp->u.iocb_cmd.u.ctarg.req_dma, GFP_KERNEL);
+ if (!sp->u.iocb_cmd.u.ctarg.req) {
+ ql_log(ql_log_warn, vha, 0xffff,
+ "Failed to allocate ct_sns request.\n");
+ spin_lock_irqsave(&vha->work_lock, flags);
+ vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
+ goto done_free_sp;
+ }
+ sp->u.iocb_cmd.u.ctarg.req_size = GPN_FT_REQ_SIZE;
+
+ rspsz = sizeof(struct ct_sns_gpnft_rsp) +
+ ((vha->hw->max_fibre_devices - 1) *
+ sizeof(struct ct_sns_gpn_ft_data));
+
+ sp->u.iocb_cmd.u.ctarg.rsp = dma_zalloc_coherent(
+ &vha->hw->pdev->dev, rspsz,
+ &sp->u.iocb_cmd.u.ctarg.rsp_dma, GFP_KERNEL);
+ if (!sp->u.iocb_cmd.u.ctarg.rsp) {
+ ql_log(ql_log_warn, vha, 0xffff,
+ "Failed to allocate ct_sns request.\n");
+ spin_lock_irqsave(&vha->work_lock, flags);
+ vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
+ goto done_free_sp;
+ }
+ sp->u.iocb_cmd.u.ctarg.rsp_size = rspsz;
+
+ ql_dbg(ql_dbg_disc, vha, 0xffff,
+ "%s scan list size %d\n", __func__, vha->scan.size);
+
+ memset(vha->scan.l, 0, vha->scan.size);
+ } else if (!sp) {
+ ql_dbg(ql_dbg_disc, vha, 0xffff,
+ "NVME scan did not provide SP\n");
return rval;
}
@@ -4210,31 +4374,10 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type)
sp->gen2 = fc4_type;
qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2);
- sp->u.iocb_cmd.u.ctarg.req = dma_zalloc_coherent(&vha->hw->pdev->dev,
- sizeof(struct ct_sns_pkt), &sp->u.iocb_cmd.u.ctarg.req_dma,
- GFP_KERNEL);
- if (!sp->u.iocb_cmd.u.ctarg.req) {
- ql_log(ql_log_warn, vha, 0xffff,
- "Failed to allocate ct_sns request.\n");
- vha->scan.scan_flags &= ~SF_SCANNING;
- goto done_free_sp;
- }
-
rspsz = sizeof(struct ct_sns_gpnft_rsp) +
((vha->hw->max_fibre_devices - 1) *
sizeof(struct ct_sns_gpn_ft_data));
- sp->u.iocb_cmd.u.ctarg.rsp = dma_zalloc_coherent(&vha->hw->pdev->dev,
- rspsz, &sp->u.iocb_cmd.u.ctarg.rsp_dma, GFP_KERNEL);
- if (!sp->u.iocb_cmd.u.ctarg.rsp) {
- ql_log(ql_log_warn, vha, 0xffff,
- "Failed to allocate ct_sns request.\n");
- vha->scan.scan_flags &= ~SF_SCANNING;
- goto done_free_sp;
- }
-
- memset(vha->scan.l, 0, vha->scan.size);
-
ct_sns = (struct ct_sns_pkt *)sp->u.iocb_cmd.u.ctarg.req;
/* CT_IU preamble */
ct_req = qla2x00_prep_ct_req(ct_sns, GPN_FT_CMD, rspsz);
@@ -4242,8 +4385,6 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type)
/* GPN_FT req */
ct_req->req.gpn_ft.port_type = fc4_type;
- sp->u.iocb_cmd.u.ctarg.req_size = GPN_FT_REQ_SIZE;
- sp->u.iocb_cmd.u.ctarg.rsp_size = rspsz;
sp->u.iocb_cmd.u.ctarg.nport_handle = NPH_SNS;
sp->u.iocb_cmd.timeout = qla2x00_async_iocb_timeout;
@@ -4251,7 +4392,9 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type)
rval = qla2x00_start_sp(sp);
if (rval != QLA_SUCCESS) {
+ spin_lock_irqsave(&vha->work_lock, flags);
vha->scan.scan_flags &= ~SF_SCANNING;
+ spin_unlock_irqrestore(&vha->work_lock, flags);
goto done_free_sp;
}
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 5520477a66d9..8aeb0ed524a1 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -5039,9 +5039,9 @@ qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
fcport->port_name, rval, fcport->fp_speed, mb[0], mb[1]);
} else {
ql_dbg(ql_dbg_disc, vha, 0x2005,
- "iIDMA adjusted to %s GB/s on %8phN.\n",
+ "iIDMA adjusted to %s GB/s (%X) on %8phN.\n",
qla2x00_get_link_speed_str(ha, fcport->fp_speed),
- fcport->port_name);
+ fcport->fp_speed, fcport->port_name);
}
}
@@ -5267,8 +5267,8 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)
qlt_do_generation_tick(vha, &discovery_gen);
if (USE_ASYNC_SCAN(ha)) {
- rval = QLA_SUCCESS;
- rval = qla24xx_async_gpnft(vha, FC4_TYPE_FCP_SCSI);
+ rval = qla24xx_async_gpnft(vha, FC4_TYPE_FCP_SCSI,
+ NULL);
if (rval)
set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
} else {
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 7fe265aca617..cb7294d2ac83 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4821,9 +4821,10 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
fcport->d_id = e->u.new_sess.id;
fcport->flags |= FCF_FABRIC_DEVICE;
fcport->fw_login_state = DSC_LS_PLOGI_PEND;
- if (e->u.new_sess.fc4_type == FC4_TYPE_FCP_SCSI) {
+ if (e->u.new_sess.fc4_type & FS_FC4TYPE_FCP)
fcport->fc4_type = FC4_TYPE_FCP_SCSI;
- } else if (e->u.new_sess.fc4_type == FC4_TYPE_NVME) {
+
+ if (e->u.new_sess.fc4_type == FS_FC4TYPE_NVME) {
fcport->fc4_type = FC4_TYPE_OTHER;
fcport->fc4f_nvme = FC4_TYPE_NVME;
}
@@ -5046,7 +5047,8 @@ qla2x00_do_work(struct scsi_qla_host *vha)
e->u.logio.data);
break;
case QLA_EVT_GPNFT:
- qla24xx_async_gpnft(vha, e->u.gpnft.fc4_type);
+ qla24xx_async_gpnft(vha, e->u.gpnft.fc4_type,
+ e->u.gpnft.sp);
break;
case QLA_EVT_GPNFT_DONE:
qla24xx_async_gpnft_done(vha, e->u.iosb.sp);
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 13/13] qla2xxx: Update driver version to 10.00.00.06-k
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
` (11 preceding siblings ...)
2018-03-12 18:16 ` [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan Himanshu Madhani
@ 2018-03-12 18:16 ` Himanshu Madhani
12 siblings, 0 replies; 27+ messages in thread
From: Himanshu Madhani @ 2018-03-12 18:16 UTC (permalink / raw)
Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
---
drivers/scsi/qla2xxx/qla_version.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index 549bef9afddd..0c55d7057280 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,7 +7,7 @@
/*
* Driver version
*/
-#define QLA2XXX_VERSION "10.00.00.05-k"
+#define QLA2XXX_VERSION "10.00.00.06-k"
#define QLA_DRIVER_MAJOR_VER 10
#define QLA_DRIVER_MINOR_VER 0
--
2.12.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan
2018-03-12 18:16 ` [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan Himanshu Madhani
@ 2018-03-12 22:48 ` kbuild test robot
2018-03-14 11:43 ` Hannes Reinecke
1 sibling, 0 replies; 27+ messages in thread
From: kbuild test robot @ 2018-03-12 22:48 UTC (permalink / raw)
Hi Quinn,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on next-20180309]
[also build test WARNING on v4.16-rc5]
[cannot apply to v4.16-rc4 v4.16-rc3 v4.16-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Himanshu-Madhani/qla2xxx-Fixes-for-FC-NVMe/20180313-055925
config: i386-randconfig-x078-201810 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings
All warnings (new ones prefixed by >>):
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:atomic_read
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:atomic_inc
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:atomic_dec
Cyclomatic Complexity 1 arch/x86/include/asm/paravirt.h:arch_local_save_flags
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:arch_irqs_disabled_flags
Cyclomatic Complexity 1 include/linux/spinlock.h:spinlock_check
Cyclomatic Complexity 1 include/linux/spinlock.h:spin_unlock_irqrestore
Cyclomatic Complexity 2 include/linux/workqueue.h:to_delayed_work
Cyclomatic Complexity 1 include/linux/completion.h:__init_completion
Cyclomatic Complexity 1 include/linux/dma-debug.h:debug_dma_alloc_coherent
Cyclomatic Complexity 1 include/linux/dma-debug.h:debug_dma_free_coherent
Cyclomatic Complexity 1 arch/x86/include/asm/dma-mapping.h:get_arch_dma_ops
Cyclomatic Complexity 4 include/linux/dma-mapping.h:get_dma_ops
Cyclomatic Complexity 7 include/linux/dma-mapping.h:dma_alloc_attrs
Cyclomatic Complexity 71 include/linux/dma-mapping.h:dma_free_attrs
Cyclomatic Complexity 1 include/linux/dma-mapping.h:dma_alloc_coherent
Cyclomatic Complexity 1 include/linux/dma-mapping.h:dma_free_coherent
Cyclomatic Complexity 1 include/linux/dma-mapping.h:dma_zalloc_coherent
Cyclomatic Complexity 1 include/linux/unaligned/access_ok.h:get_unaligned_be64
Cyclomatic Complexity 1 include/scsi/scsi_transport_fc.h:wwn_to_u64
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_target.h:qla_ini_mode_enabled
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_target.h:qla_dual_mode_enabled
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_inline.h:qla2x00_is_reserved_id
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_inline.h:qla2x00_clear_loop_id
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_inline.h:qla2x00_get_sp
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_inline.h:qla2x00_init_timer
Cyclomatic Complexity 1 include/linux/utsname.h:utsname
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_prep_ct_req
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gid_pt_rsp_size
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_prep_sns_cmd
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_update_ms_fdmi_iocb
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_prep_ct_fdmi_req
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_prep_ct_fm_req
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_sns_ga_nxt
Cyclomatic Complexity 6 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_sns_gid_pt
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_sns_gpn_id
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_sns_gnn_id
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_sns_rft_id
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_sns_rnn_id
Cyclomatic Complexity 7 drivers/scsi/qla2xxx/qla_gs.c:qla_async_rftid
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla_async_rffid
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla_async_rnnid
Cyclomatic Complexity 8 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_async_sns_sp_done
Cyclomatic Complexity 8 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gnnft
Cyclomatic Complexity 11 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gpsc_sp_done
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gffid_sp_done
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_async_gnnid_sp_done
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_async_gfpnid_sp_done
Cyclomatic Complexity 6 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_is_a_vp
Cyclomatic Complexity 29 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_async_gpnft_gnnft_sp_done
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_prep_ms_iocb
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_prep_ms_iocb
Cyclomatic Complexity 11 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_chk_ms_status
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_fdmi_dhba
Cyclomatic Complexity 8 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_fdmi_rhba
Cyclomatic Complexity 19 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_fdmi_rpa
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_ga_nxt
Cyclomatic Complexity 7 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gid_pt
Cyclomatic Complexity 6 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gpn_id
Cyclomatic Complexity 6 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gnn_id
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_rft_id
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_rff_id
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_rnn_id
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_get_sym_node_name
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla_async_rsnn_nn
Cyclomatic Complexity 10 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_fdmiv2_rhba
Cyclomatic Complexity 21 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_fdmiv2_rpa
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_rsnn_nn
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_mgmt_svr_login
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_prep_ms_fdmi_iocb
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_prep_ms_fdmi_iocb
Cyclomatic Complexity 12 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_fdmi_register
Cyclomatic Complexity 6 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gfpn_id
Cyclomatic Complexity 17 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gpsc
Cyclomatic Complexity 7 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_gff_id
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gidpn
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_post_gidpn_work
Cyclomatic Complexity 13 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_handle_gidpn_event
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_async_gidpn_sp_done
Cyclomatic Complexity 2 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_post_gpsc_work
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_handle_gpsc_event
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gpsc
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_post_gpnid_work
Cyclomatic Complexity 8 drivers/scsi/qla2xxx/qla_gs.c:qla2x00_async_gpnid_sp_done
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_sp_unmap
Cyclomatic Complexity 25 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_handle_gpnid_event
Cyclomatic Complexity 12 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gpnid
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_handle_gffid_event
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gffid
Cyclomatic Complexity 28 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gnnft_done
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gpnft_done
Cyclomatic Complexity 12 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gpnft
Cyclomatic Complexity 3 drivers/scsi/qla2xxx/qla_gs.c:qla_scan_work_fn
Cyclomatic Complexity 1 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_handle_gnnid_event
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gnnid
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_post_gnnid_work
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_handle_gfpnid_event
Cyclomatic Complexity 5 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_async_gfpnid
Cyclomatic Complexity 4 drivers/scsi/qla2xxx/qla_gs.c:qla24xx_post_gfpnid_work
drivers/scsi/qla2xxx/qla_gs.c: In function 'qla2x00_async_gpnft_gnnft_sp_done':
>> drivers/scsi/qla2xxx/qla_gs.c:4094:19: warning: 'rp' may be used uninitialized in this function [-Wmaybe-uninitialized]
rp->fc4type |= FS_FC4TYPE_NVME;
^~
vim +/rp +4094 drivers/scsi/qla2xxx/qla_gs.c
3975
3976 static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
3977 {
3978 struct srb *sp = s;
3979 struct scsi_qla_host *vha = sp->vha;
3980 struct qla_work_evt *e;
3981 struct ct_sns_req *ct_req =
3982 (struct ct_sns_req *)sp->u.iocb_cmd.u.ctarg.req;
3983 struct ct_sns_gpnft_rsp *ct_rsp =
3984 (struct ct_sns_gpnft_rsp *)sp->u.iocb_cmd.u.ctarg.rsp;
3985 struct ct_sns_gpn_ft_data *d;
3986 struct fab_scan_rp *rp;
3987 int i, j, k;
3988 u16 cmd = be16_to_cpu(ct_req->command);
3989 u8 fc4_type = sp->gen2;
3990 u8 found;
3991 unsigned long flags;
3992
3993 /* gen2 field is holding the fc4type */
3994 ql_dbg(ql_dbg_disc, vha, 0xffff,
3995 "Async done-%s res %x FC4Type %x\n",
3996 sp->name, res, sp->gen2);
3997
3998 if (res) {
3999 unsigned long flags;
4000
4001 sp->free(sp);
4002 spin_lock_irqsave(&vha->work_lock, flags);
4003 vha->scan.scan_flags &= ~SF_SCANNING;
4004 vha->scan.scan_retry++;
4005 spin_unlock_irqrestore(&vha->work_lock, flags);
4006
4007 if (vha->scan.scan_retry < MAX_SCAN_RETRIES) {
4008 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
4009 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
4010 qla2xxx_wake_dpc(vha);
4011 } else {
4012 ql_dbg(ql_dbg_disc, sp->vha, 0xffff,
4013 "Async done-%s rescan failed on all retries\n",
4014 sp->name);
4015 }
4016 return;
4017 }
4018
4019 if (!res) {
4020 port_id_t id;
4021 u64 wwn;
4022
4023 j = 0;
4024 for (i = 0; i < vha->hw->max_fibre_devices; i++) {
4025 d = &ct_rsp->entries[i];
4026
4027 id.b.rsvd_1 = 0;
4028 id.b.domain = d->port_id[0];
4029 id.b.area = d->port_id[1];
4030 id.b.al_pa = d->port_id[2];
4031 wwn = wwn_to_u64(d->port_name);
4032
4033 if (id.b24 == 0 || wwn == 0)
4034 continue;
4035
4036 if (fc4_type == FC4_TYPE_FCP_SCSI) {
4037 if (cmd == GPN_FT_CMD) {
4038 rp = &vha->scan.l[j];
4039 rp->id = id;
4040 memcpy(rp->port_name, d->port_name, 8);
4041 j++;
4042 rp->fc4type = FS_FC4TYPE_FCP;
4043 } else {/* GNN_FT_CMD */
4044 for (k = 0;
4045 k < vha->hw->max_fibre_devices;
4046 k++) {
4047 rp = &vha->scan.l[k];
4048 if (id.b24 == rp->id.b24) {
4049 memcpy(rp->node_name,
4050 d->port_name, 8);
4051 break;
4052 }
4053 }
4054 }
4055 } else { /* FC4_TYPE_NVME */
4056 if (cmd == GPN_FT_CMD) {
4057 found = 0;
4058 for (k = 0;
4059 k < vha->hw->max_fibre_devices;
4060 k++) {
4061 rp = &vha->scan.l[k];
4062 if (!memcmp(rp->port_name,
4063 d->port_name, 8)) {
4064 /*
4065 * This remote port
4066 * supports NVME & FCP
4067 */
4068 rp->fc4type |=
4069 FS_FC4TYPE_NVME;
4070 found = 1;
4071 break;
4072 }
4073 }
4074 if (!found) {
4075 /* find free slot */
4076 for (k = 0;
4077 k < vha->hw->max_fibre_devices;
4078 k++) {
4079 rp = &vha->scan.l[k];
4080 if (wwn_to_u64
4081 (rp->port_name))
4082 continue;
4083 else
4084 /*
4085 * found free
4086 * slot
4087 */
4088 break;
4089 }
4090
4091 rp->id = id;
4092 memcpy(rp->port_name,
4093 d->port_name, 8);
> 4094 rp->fc4type |= FS_FC4TYPE_NVME;
4095 }
4096
4097 } else {/* GNN_FT_CMD */
4098 for (k = 0;
4099 k < vha->hw->max_fibre_devices;
4100 k++) {
4101 rp = &vha->scan.l[k];
4102 if (id.b24 == rp->id.b24) {
4103 memcpy(rp->node_name,
4104 d->port_name, 8);
4105 break;
4106 }
4107 }
4108 }
4109 }
4110 }
4111 }
4112
4113 if ((fc4_type == FC4_TYPE_FCP_SCSI) && vha->flags.nvme_enabled &&
4114 cmd == GNN_FT_CMD) {
4115 del_timer(&sp->u.iocb_cmd.timer);
4116 spin_lock_irqsave(&vha->work_lock, flags);
4117 vha->scan.scan_flags &= ~SF_SCANNING;
4118 spin_unlock_irqrestore(&vha->work_lock, flags);
4119
4120 e = qla2x00_alloc_work(vha, QLA_EVT_GPNFT);
4121 if (!e) {
4122 /*
4123 * please ignore kernel warning. Otherwise,
4124 * we have mem leak.
4125 */
4126 if (sp->u.iocb_cmd.u.ctarg.req) {
4127 dma_free_coherent(&vha->hw->pdev->dev,
4128 sizeof(struct ct_sns_pkt),
4129 sp->u.iocb_cmd.u.ctarg.req,
4130 sp->u.iocb_cmd.u.ctarg.req_dma);
4131 sp->u.iocb_cmd.u.ctarg.req = NULL;
4132 }
4133 if (sp->u.iocb_cmd.u.ctarg.rsp) {
4134 dma_free_coherent(&vha->hw->pdev->dev,
4135 sizeof(struct ct_sns_pkt),
4136 sp->u.iocb_cmd.u.ctarg.rsp,
4137 sp->u.iocb_cmd.u.ctarg.rsp_dma);
4138 sp->u.iocb_cmd.u.ctarg.rsp = NULL;
4139 }
4140
4141 ql_dbg(ql_dbg_disc, vha, 0xffff,
4142 "Async done-%s unable to alloc work element\n",
4143 sp->name);
4144 sp->free(sp);
4145 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
4146 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
4147 return;
4148 }
4149 e->u.gpnft.fc4_type = FC4_TYPE_NVME;
4150 sp->rc = res;
4151 e->u.gpnft.sp = sp;
4152
4153 qla2x00_post_work(vha, e);
4154 return;
4155 }
4156
4157 if (cmd == GPN_FT_CMD)
4158 e = qla2x00_alloc_work(vha, QLA_EVT_GPNFT_DONE);
4159 else
4160 e = qla2x00_alloc_work(vha, QLA_EVT_GNNFT_DONE);
4161 if (!e) {
4162 /* please ignore kernel warning. Otherwise, we have mem leak. */
4163 if (sp->u.iocb_cmd.u.ctarg.req) {
4164 dma_free_coherent(&vha->hw->pdev->dev,
4165 sizeof(struct ct_sns_pkt),
4166 sp->u.iocb_cmd.u.ctarg.req,
4167 sp->u.iocb_cmd.u.ctarg.req_dma);
4168 sp->u.iocb_cmd.u.ctarg.req = NULL;
4169 }
4170 if (sp->u.iocb_cmd.u.ctarg.rsp) {
4171 dma_free_coherent(&vha->hw->pdev->dev,
4172 sizeof(struct ct_sns_pkt),
4173 sp->u.iocb_cmd.u.ctarg.rsp,
4174 sp->u.iocb_cmd.u.ctarg.rsp_dma);
4175 sp->u.iocb_cmd.u.ctarg.rsp = NULL;
4176 }
4177
4178 ql_dbg(ql_dbg_disc, vha, 0xffff,
4179 "Async done-%s unable to alloc work element\n",
4180 sp->name);
4181 sp->free(sp);
4182 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
4183 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
4184 return;
4185 }
4186
4187 sp->rc = res;
4188 e->u.iosb.sp = sp;
4189
4190 qla2x00_post_work(vha, e);
4191 }
4192
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 32960 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-nvme/attachments/20180313/8aed896b/attachment-0001.gz>
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup for FC-NVMe
2018-03-12 18:16 ` [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup " Himanshu Madhani
@ 2018-03-14 11:12 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:12 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_nvme.c | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 02/13] qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote()
2018-03-12 18:16 ` [PATCH 02/13] qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote() Himanshu Madhani
@ 2018-03-14 11:13 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:13 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_init.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index cb182b102bfd..6caccc52376a 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -5110,13 +5110,14 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
> fcport->deleted = 0;
> fcport->logout_on_delete = 1;
>
> + qla2x00_set_fcport_state(fcport, FCS_ONLINE);
> + qla2x00_iidma_fcport(vha, fcport);
> +
> if (fcport->fc4f_nvme) {
> qla_nvme_register_remote(vha, fcport);
> return;
> }
>
> - qla2x00_set_fcport_state(fcport, FCS_ONLINE);
> - qla2x00_iidma_fcport(vha, fcport);
> qla24xx_update_fcport_fcp_prio(vha, fcport);
>
> reg_port:
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 03/13] qla2xxx: Add changes for devloss timeout in driver
2018-03-12 18:16 ` [PATCH 03/13] qla2xxx: Add changes for devloss timeout in driver Himanshu Madhani
@ 2018-03-14 11:15 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:15 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Add support for error recovery within devloss timeout, now that
> FC-NVMe transport support devloss timeout.
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_def.h | 1 +
> drivers/scsi/qla2xxx/qla_init.c | 8 +++
> drivers/scsi/qla2xxx/qla_isr.c | 5 +-
> drivers/scsi/qla2xxx/qla_nvme.c | 142 +++++++++++++++++---------------------
> drivers/scsi/qla2xxx/qla_nvme.h | 6 +-
> drivers/scsi/qla2xxx/qla_target.c | 13 ++--
> drivers/scsi/qla2xxx/qla_target.h | 2 +-
> 7 files changed, 87 insertions(+), 90 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 04/13] qla2xxx: Restore ZIO threshold setting
2018-03-12 18:16 ` [PATCH 04/13] qla2xxx: Restore ZIO threshold setting Himanshu Madhani
@ 2018-03-14 11:15 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:15 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_nvme.c | 5 -----
> 1 file changed, 5 deletions(-)
>
> diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
> index a8e81fc14c44..5ee447680ddd 100644
> --- a/drivers/scsi/qla2xxx/qla_nvme.c
> +++ b/drivers/scsi/qla2xxx/qla_nvme.c
> @@ -464,11 +464,6 @@ static int qla2x00_start_nvme_mq(srb_t *sp)
> /* Set chip new ring index. */
> WRT_REG_DWORD(req->req_q_in, req->ring_index);
>
> - /* Manage unprocessed RIO/ZIO commands in response queue. */
> - if (vha->flags.process_response_queue &&
> - rsp->ring_ptr->signature != RESPONSE_PROCESSED)
> - qla24xx_process_response_queue(vha, rsp);
> -
> queuing_error:
> spin_unlock_irqrestore(&qpair->qp_lock, flags);
> return rval;
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 05/13] qla2xxx: Add FC-NVMe abort processing
2018-03-12 18:16 ` [PATCH 05/13] qla2xxx: Add FC-NVMe abort processing Himanshu Madhani
@ 2018-03-14 11:16 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:16 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_nvme.c | 36 ++++++++++++++++++------------------
> drivers/scsi/qla2xxx/qla_nvme.h | 1 +
> 2 files changed, 19 insertions(+), 18 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 06/13] qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change
2018-03-12 18:16 ` [PATCH 06/13] qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change Himanshu Madhani
@ 2018-03-14 11:33 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:33 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
Some more text would be nice; not everyone knows what n2n_ae or PDB is ...
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_def.h | 2 --
> drivers/scsi/qla2xxx/qla_isr.c | 3 ---
> drivers/scsi/qla2xxx/qla_mbx.c | 3 +++
> 3 files changed, 3 insertions(+), 5 deletions(-)
>
Otherwise:
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 07/13] qla2xxx: Return busy if rport going away
2018-03-12 18:16 ` [PATCH 07/13] qla2xxx: Return busy if rport going away Himanshu Madhani
@ 2018-03-14 11:34 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:34 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> This patch adds mechanism to retur EBUSY if rport is going away
> to prevent exhausting FC-NVMe layer's retry counter.
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_def.h | 1 +
> drivers/scsi/qla2xxx/qla_isr.c | 4 +++-
> drivers/scsi/qla2xxx/qla_nvme.c | 31 ++++++++++++++++++++-----------
> 3 files changed, 24 insertions(+), 12 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 08/13] qla2xxx: Remove nvme_done_list
2018-03-12 18:16 ` [PATCH 08/13] qla2xxx: Remove nvme_done_list Himanshu Madhani
@ 2018-03-14 11:35 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:35 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_def.h | 1 -
> drivers/scsi/qla2xxx/qla_gbl.h | 2 --
> drivers/scsi/qla2xxx/qla_init.c | 1 -
> drivers/scsi/qla2xxx/qla_mid.c | 6 ------
> drivers/scsi/qla2xxx/qla_nvme.c | 13 ++-----------
> drivers/scsi/qla2xxx/qla_os.c | 1 -
> 6 files changed, 2 insertions(+), 22 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 09/13] qla2xxx: Fix retry for PRLI RJT with reason of BUSY
2018-03-12 18:16 ` [PATCH 09/13] qla2xxx: Fix retry for PRLI RJT with reason of BUSY Himanshu Madhani
@ 2018-03-14 11:36 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:36 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_dbg.c | 2 +-
> drivers/scsi/qla2xxx/qla_init.c | 13 ++++++++++++-
> drivers/scsi/qla2xxx/qla_mbx.c | 7 +++++--
> 3 files changed, 18 insertions(+), 4 deletions(-)
>
Again, some more descriptive text would be nice.
Otherwise:
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 10/13] qla2xxx: Fix FC-NVMe IO abort during driver reset
2018-03-12 18:16 ` [PATCH 10/13] qla2xxx: Fix FC-NVMe IO abort during driver reset Himanshu Madhani
@ 2018-03-14 11:38 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:38 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_nvme.c | 17 ++++++++++++-----
> drivers/scsi/qla2xxx/qla_nvme.h | 2 +-
> drivers/scsi/qla2xxx/qla_os.c | 2 +-
> 3 files changed, 14 insertions(+), 7 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 11/13] qla2xxx: Cleanup code to improve FC-NVMe error handling
2018-03-12 18:16 ` [PATCH 11/13] qla2xxx: Cleanup code to improve FC-NVMe error handling Himanshu Madhani
@ 2018-03-14 11:40 ` Hannes Reinecke
0 siblings, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:40 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Darren Trapp <darren.trapp at cavium.com>
>
> Signed-off-by: Darren Trapp <darren.trapp at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_isr.c | 78 +++++++++++++++--------------------------
> drivers/scsi/qla2xxx/qla_nvme.c | 2 +-
> 2 files changed, 29 insertions(+), 51 deletions(-)
>
And also here, please add some description what this patch does.
Otherwise:
Reviewed-by: Hannes Reinecke <hare at suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan
2018-03-12 18:16 ` [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan Himanshu Madhani
2018-03-12 22:48 ` kbuild test robot
@ 2018-03-14 11:43 ` Hannes Reinecke
1 sibling, 0 replies; 27+ messages in thread
From: Hannes Reinecke @ 2018-03-14 11:43 UTC (permalink / raw)
On 03/12/2018 07:16 PM, Himanshu Madhani wrote:
> From: Quinn Tran <quinn.tran at cavium.com>
>
> This patch combines FCP and FC-NVMe scan into single scan when
> driver detects FC-NVMe capability on same port.
>
> Signed-off-by: Quinn Tran <quinn.tran at cavium.com>
> Signed-off-by: Himanshu Madhani <himanshu.madhani at cavium.com>
> ---
> drivers/scsi/qla2xxx/qla_def.h | 7 ++
> drivers/scsi/qla2xxx/qla_gbl.h | 2 +-
> drivers/scsi/qla2xxx/qla_gs.c | 231 ++++++++++++++++++++++++++++++++--------
> drivers/scsi/qla2xxx/qla_init.c | 8 +-
> drivers/scsi/qla2xxx/qla_os.c | 8 +-
> 5 files changed, 204 insertions(+), 52 deletions(-)
>
Please fixup the kbuild robot warning.
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2018-03-14 11:43 UTC | newest]
Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-12 18:16 [PATCH 00/13] qla2xxx: Fixes for FC-NVMe Himanshu Madhani
2018-03-12 18:16 ` [PATCH 01/13] qla2xxx: Remove unneeded message and minor cleanup " Himanshu Madhani
2018-03-14 11:12 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 02/13] qla2xxx: Set IIDMA and fcport state before qla_nvme_register_remote() Himanshu Madhani
2018-03-14 11:13 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 03/13] qla2xxx: Add changes for devloss timeout in driver Himanshu Madhani
2018-03-14 11:15 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 04/13] qla2xxx: Restore ZIO threshold setting Himanshu Madhani
2018-03-14 11:15 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 05/13] qla2xxx: Add FC-NVMe abort processing Himanshu Madhani
2018-03-14 11:16 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 06/13] qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change Himanshu Madhani
2018-03-14 11:33 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 07/13] qla2xxx: Return busy if rport going away Himanshu Madhani
2018-03-14 11:34 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 08/13] qla2xxx: Remove nvme_done_list Himanshu Madhani
2018-03-14 11:35 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 09/13] qla2xxx: Fix retry for PRLI RJT with reason of BUSY Himanshu Madhani
2018-03-14 11:36 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 10/13] qla2xxx: Fix FC-NVMe IO abort during driver reset Himanshu Madhani
2018-03-14 11:38 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 11/13] qla2xxx: Cleanup code to improve FC-NVMe error handling Himanshu Madhani
2018-03-14 11:40 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 12/13] qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan Himanshu Madhani
2018-03-12 22:48 ` kbuild test robot
2018-03-14 11:43 ` Hannes Reinecke
2018-03-12 18:16 ` [PATCH 13/13] qla2xxx: Update driver version to 10.00.00.06-k Himanshu Madhani
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.