public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1]
@ 2010-02-18 16:38 giridhar.malavali
  2010-02-18 16:38 ` [PATCH 1/8] qla2xxx: Initialize payload receive lenght in failure path of vendor commands giridhar.malavali
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Giridhar Malavali <giridhar.malavali@qlogic.com>

James,

Please apply..

Andrew Vasquez (4):
  qla2xxx: Correct EH bus-reset handling.
  qla2xxx: Correct use-after-free issue in terminate_rport_io callback.
  qla2xxx: Correct loop-resync issues during SNS scans.
  qla2xxx: Add firmware ETS burst support.

Giridhar Malavali (2):
  qla2xxx: Proper clean-up of BSG requests when request times out.
  qla2xxx: Update version number to 8.03.02-k1.

Richard Lary (1):
  qla2xxx: EEH: Restore PCI saved state during pci slot reset.

Sarang Radke (1):
  qla2xxx: Initialize payload receive lenght in failure path of vendor
    commands

 drivers/scsi/qla2xxx/qla_attr.c    |  128 +++++++++++++++--------------------
 drivers/scsi/qla2xxx/qla_gbl.h     |    2 +-
 drivers/scsi/qla2xxx/qla_init.c    |   18 +++++-
 drivers/scsi/qla2xxx/qla_os.c      |   91 +++++++++++---------------
 drivers/scsi/qla2xxx/qla_version.h |    4 +-
 5 files changed, 112 insertions(+), 131 deletions(-)


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

* [PATCH 1/8] qla2xxx: Initialize payload receive lenght in failure path of vendor commands
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 2/8] qla2xxx: Proper clean-up of BSG requests when request times out giridhar.malavali
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, andrew.vasquez, linux-scsi, Sarang Radke

From: Sarang Radke <sarang.radke@qlogic.com>

Since bsg_job->reply->reply_payload_rcv_len is uninitialized
in case of failure, fc-transport triggers a warning for each command
failed.
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 5a19aea..cbce52e 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -2284,6 +2284,7 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 			"scsi(%ld) Vendor request %s failed\n", vha->host_no, type));
 		rval = 0;
 		bsg_job->reply->result = (DID_ERROR << 16);
+		bsg_job->reply->reply_payload_rcv_len = 0;
 		fw_sts_ptr = ((uint8_t*)bsg_job->req->sense) + sizeof(struct fc_bsg_reply);
 		memcpy( fw_sts_ptr, response, sizeof(response));
 		fw_sts_ptr += sizeof(response);
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 2/8] qla2xxx: Proper clean-up of BSG requests when request times out.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
  2010-02-18 16:38 ` [PATCH 1/8] qla2xxx: Initialize payload receive lenght in failure path of vendor commands giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 3/8] qla2xxx: Correct EH bus-reset handling giridhar.malavali
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Giridhar Malavali <giridhar.malavali@qlogic.com>

Fix for BSG request cleanup when the request timesout.
Proper release of driver resources used for BSG request during timeout cleanup.

Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |  125 +++++++++++++++++----------------------
 drivers/scsi/qla2xxx/qla_os.c   |   15 ++++-
 2 files changed, 67 insertions(+), 73 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index cbce52e..25596fe 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -1882,12 +1882,6 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
 		ha = vha->hw;
 		type = "FC_BSG_RPT_ELS";
 
-		DEBUG2(printk(KERN_INFO
-		    "scsi(%ld): loop-id=%x portid=%02x%02x%02x.\n",
-		    fcport->vha->host_no, fcport->loop_id,
-		    fcport->d_id.b.domain, fcport->d_id.b.area,
-		    fcport->d_id.b.al_pa));
-
 		/* make sure the rport is logged in,
 		 * if not perform fabric login
 		 */
@@ -1904,11 +1898,6 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
 		ha = vha->hw;
 		type = "FC_BSG_HST_ELS_NOLOGIN";
 
-		DEBUG2(printk(KERN_INFO
-		    "scsi(%ld): loop-id=%x portid=%02x%02x%02x.\n",
-		    vha->host_no, vha->loop_id,
-		    vha->d_id.b.domain, vha->d_id.b.area, vha->d_id.b.al_pa));
-
 		/* Allocate a dummy fcport structure, since functions
 		 * preparing the IOCB and mailbox command retrieves port
 		 * specific information from fcport structure. For Host based
@@ -1934,9 +1923,12 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
 		    NPH_FABRIC_CONTROLLER : NPH_F_PORT;
 	}
 
-	DEBUG2(printk(KERN_INFO
-	    "scsi(%ld): vendor-id = %llu\n",
-	    vha->host_no, host->hostt->vendor_id));
+	if (!vha->flags.online) {
+		DEBUG2(qla_printk(KERN_WARNING, ha,
+		    "host not online\n"));
+		rval = -EIO;
+		goto done;
+	}
 
         req_sg_cnt =
 	    dma_map_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list,
@@ -2059,6 +2051,13 @@ qla2x00_process_ct(struct fc_bsg_job *bsg_job)
                 goto done_unmap_sg;
 	}
 
+	if (!vha->flags.online) {
+		DEBUG2(qla_printk(KERN_WARNING, ha,
+		    "host not online\n"));
+		rval = -EIO;
+                goto done_unmap_sg;
+	}
+
 	loop_id =
 	    (bsg_job->request->rqst_data.h_ct.preamble_word1 & 0xFF000000)
 	    >> 24;
@@ -2161,6 +2160,13 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 		goto done;
 	}
 
+	if (!vha->flags.online) {
+		DEBUG2(qla_printk(KERN_WARNING, ha,
+		    "host not online\n"));
+		rval = -EIO;
+                goto done;
+	}
+
         elreq.req_sg_cnt =
 	    dma_map_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list,
 	    bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
@@ -2219,20 +2225,10 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 		if (ha->current_topology != ISP_CFG_F) {
 			type = "FC_BSG_HST_VENDOR_LOOPBACK";
 
-			if ((IS_QLA81XX(ha)) &&
-				((elreq.options == 0) || (elreq.options == 2))) {
-				DEBUG2(qla_printk(KERN_INFO, ha, "scsi(%ld)"
-				"loopback option:0x%x not supported\n", vha->host_no, elreq.options));
-				rval = -EINVAL;
-				goto done_unmap_sg;
-			}
-
 			DEBUG2(qla_printk(KERN_INFO, ha,
 				"scsi(%ld) bsg rqst type: %s vendor rqst type: %x options: %x.\n",
 				vha->host_no, type, vendor_cmd, elreq.options));
-			DEBUG2(qla_printk(KERN_INFO, ha,
-				"scsi(%ld) tx_addr: 0x%llx rx_addr: 0x%llx tx_sg_cnt: %x rx_sg_cnt: %x\n",
-				vha->host_no, (unsigned long long)elreq.send_dma, (unsigned long long)elreq.rcv_dma, elreq.req_sg_cnt, elreq.rsp_sg_cnt));
+
 			command_sent = INT_DEF_LB_LOOPBACK_CMD;
 			rval = qla2x00_loopback_test(vha, &elreq, response);
 			if (IS_QLA81XX(ha)) {
@@ -2248,9 +2244,7 @@ qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
 			DEBUG2(qla_printk(KERN_INFO, ha,
 				"scsi(%ld) bsg rqst type: %s vendor rqst type: %x options: %x.\n",
 				vha->host_no, type, vendor_cmd, elreq.options));
-			DEBUG2(qla_printk(KERN_INFO, ha,
-				"scsi(%ld) tx_addr: 0x%llx rx_addr: 0x%llx tx_sg_cnt: %x rx_sg_cnt: %x\n",
-				vha->host_no, (unsigned long long)elreq.send_dma, (unsigned long long)elreq.rcv_dma, elreq.req_sg_cnt, elreq.rsp_sg_cnt));
+
 			command_sent = INT_DEF_LB_ECHO_CMD;
 			rval = qla2x00_echo_test(vha, &elreq, response);
 		}
@@ -2353,60 +2347,49 @@ qla24xx_bsg_timeout(struct fc_bsg_job *bsg_job)
         scsi_qla_host_t *vha = shost_priv(bsg_job->shost);
         struct qla_hw_data *ha = vha->hw;
         srb_t *sp;
-        int i;
+        int cnt, que;
         unsigned long flags;
-        uint16_t que_id;
         struct req_que *req;
-        struct rsp_que *rsp;
-	int found = 0;
 	struct srb_bsg *sp_bsg;
 
 	/* find the bsg job from the active list of commands */
         spin_lock_irqsave(&ha->hardware_lock, flags);
-	req = ha->req_q_map[0];
-        que_id = req->id;
-        if (req->rsp)
-                rsp = req->rsp;
-        else
-                rsp = ha->rsp_q_map[que_id];
-
-	for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++ ) {
-                sp = req->outstanding_cmds[i];
-
-                if (sp == NULL)
-                        continue;
-
-		sp_bsg = (struct srb_bsg*)sp->ctx;
+	for (que = 0; que < ha->max_req_queues; que++) {
+		req = ha->req_q_map[que];
+		if (!req)
+			continue;
 
-		if (((sp_bsg->ctx.type == SRB_CT_CMD) ||
-		    (sp_bsg->ctx.type == SRB_ELS_CMD_RPT)
-		    || ( sp_bsg->ctx.type == SRB_ELS_CMD_HST)) &&
-		    (sp_bsg->bsg_job == bsg_job)) {
-			DEBUG2(qla_printk(KERN_INFO, ha,
-			    "scsi(%ld) req_q: %p rsp_q: %p que_id: %x sp: %p\n",
-			    vha->host_no, req, rsp, que_id, sp));
-			found = 1;
-			break;
+		for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++ ) {
+			sp = req->outstanding_cmds[cnt];
+
+			if (sp) {
+				sp_bsg = (struct srb_bsg*)sp->ctx;
+
+				if (((sp_bsg->ctx.type == SRB_CT_CMD) ||
+				    (sp_bsg->ctx.type == SRB_ELS_CMD_RPT)
+				    || ( sp_bsg->ctx.type == SRB_ELS_CMD_HST)) &&
+				    (sp_bsg->bsg_job == bsg_job)) {
+					if (ha->isp_ops->abort_command(sp)) {
+						DEBUG2(qla_printk(KERN_INFO, ha,
+						"scsi(%ld): mbx abort_command failed\n", vha->host_no));
+						bsg_job->req->errors = bsg_job->reply->result = -EIO;
+					} else {
+						DEBUG2(qla_printk(KERN_INFO, ha,
+						"scsi(%ld): mbx abort_command success\n", vha->host_no));
+						bsg_job->req->errors = bsg_job->reply->result = 0;
+					}
+					goto done;
+				}
+			}
 		}
 	}
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
-	if (!found) {
-		DEBUG2(qla_printk(KERN_INFO, ha,
-			"scsi(%ld) SRB not found to abort\n", vha->host_no));
-		bsg_job->req->errors = bsg_job->reply->result = -ENXIO;
-		return 0;
-	}
-
-	if (ha->isp_ops->abort_command(sp)) {
-		DEBUG2(qla_printk(KERN_INFO, ha,
-		"scsi(%ld): mbx abort_command failed\n", vha->host_no));
-		bsg_job->req->errors = bsg_job->reply->result = -EIO;
-	} else {
-		DEBUG2(qla_printk(KERN_INFO, ha,
-		"scsi(%ld): mbx abort_command success\n", vha->host_no));
-		bsg_job->req->errors = bsg_job->reply->result = 0;
-	}
+	DEBUG2(qla_printk(KERN_INFO, ha,
+		"scsi(%ld) SRB not found to abort\n", vha->host_no));
+	bsg_job->req->errors = bsg_job->reply->result = -ENXIO;
+	return 0;
 
+done:
 	if (bsg_job->request->msgcode == FC_BSG_HST_CT)
 		kfree(sp->fcport);
 	kfree(sp->ctx);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index ddc1d3d..7649005 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1160,8 +1160,19 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
 					qla2x00_sp_compl(ha, sp);
 				} else {
 					ctx = sp->ctx;
-					del_timer_sync(&ctx->timer);
-					ctx->free(sp);
+					if (ctx->type == SRB_LOGIN_CMD || ctx->type == SRB_LOGOUT_CMD) {
+						del_timer_sync(&ctx->timer);
+						ctx->free(sp);
+					} else {
+						struct srb_bsg* sp_bsg = (struct srb_bsg*)sp->ctx;
+						if (sp_bsg->bsg_job->request->msgcode == FC_BSG_HST_CT)
+							kfree(sp->fcport);
+						sp_bsg->bsg_job->req->errors = 0;
+						sp_bsg->bsg_job->reply->result = res;
+						sp_bsg->bsg_job->job_done(sp_bsg->bsg_job);
+						kfree(sp->ctx);
+						mempool_free(sp, ha->srb_mempool);
+					}
 				}
 			}
 		}
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 3/8] qla2xxx: Correct EH bus-reset handling.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
  2010-02-18 16:38 ` [PATCH 1/8] qla2xxx: Initialize payload receive lenght in failure path of vendor commands giridhar.malavali
  2010-02-18 16:38 ` [PATCH 2/8] qla2xxx: Proper clean-up of BSG requests when request times out giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 4/8] qla2xxx: Correct use-after-free issue in terminate_rport_io callback giridhar.malavali
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

Target-level resets are unlikely to complete if done after the
bus (LIP/OLS/NOS) has been reset.  Perform target-level resets,
if necessary, prior to hitting the bus.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_os.c |   27 ++++++++++++++-------------
 1 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 7649005..cdb089c 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1095,6 +1095,20 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
 	struct fc_port *fcport;
 	struct qla_hw_data *ha = vha->hw;
 
+	if (ha->flags.enable_target_reset) {
+		list_for_each_entry(fcport, &vha->vp_fcports, list) {
+			if (fcport->port_type != FCT_TARGET)
+				continue;
+
+			ret = ha->isp_ops->target_reset(fcport, 0, 0);
+			if (ret != QLA_SUCCESS) {
+				DEBUG2_3(printk("%s(%ld): bus_reset failed: "
+				    "target_reset=%d d_id=%x.\n", __func__,
+				    vha->host_no, ret, fcport->d_id.b24));
+			}
+		}
+	}
+
 	if (ha->flags.enable_lip_full_login && !IS_QLA81XX(ha)) {
 		ret = qla2x00_full_login_lip(vha);
 		if (ret != QLA_SUCCESS) {
@@ -1117,19 +1131,6 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
 			qla2x00_wait_for_loop_ready(vha);
 	}
 
-	if (ha->flags.enable_target_reset) {
-		list_for_each_entry(fcport, &vha->vp_fcports, list) {
-			if (fcport->port_type != FCT_TARGET)
-				continue;
-
-			ret = ha->isp_ops->target_reset(fcport, 0, 0);
-			if (ret != QLA_SUCCESS) {
-				DEBUG2_3(printk("%s(%ld): bus_reset failed: "
-				    "target_reset=%d d_id=%x.\n", __func__,
-				    vha->host_no, ret, fcport->d_id.b24));
-			}
-		}
-	}
 	/* Issue marker command only when we are going to start the I/O */
 	vha->marker_needed = 1;
 
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 4/8] qla2xxx: Correct use-after-free issue in terminate_rport_io callback.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
                   ` (2 preceding siblings ...)
  2010-02-18 16:38 ` [PATCH 3/8] qla2xxx: Correct EH bus-reset handling giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 5/8] qla2xxx: Correct loop-resync issues during SNS scans giridhar.malavali
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

The explicit logout (LOGO) issued at the end of the callback will
flush (via normal scsi_cmnd->done()) any outstanding commands
(FCP2) the firmware is holding.  While iterating through the
outstanding_cmnd array in qla2x00_abort_fcport_cmds(), locking
and unlocking of the hardware spinlock, opens-up the driver to
cases where the processed SRB (sp) could be used after the
command completed from interrupt context.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |    2 --
 drivers/scsi/qla2xxx/qla_gbl.h  |    1 -
 drivers/scsi/qla2xxx/qla_os.c   |   38 --------------------------------------
 3 files changed, 0 insertions(+), 41 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 25596fe..90d1e06 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -1531,8 +1531,6 @@ qla2x00_terminate_rport_io(struct fc_rport *rport)
 		fcport->vha->hw->isp_ops->fabric_logout(fcport->vha,
 			fcport->loop_id, fcport->d_id.b.domain,
 			fcport->d_id.b.area, fcport->d_id.b.al_pa);
-
-	qla2x00_abort_fcport_cmds(fcport);
 }
 
 static int
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 91bb16c..e201650 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -96,7 +96,6 @@ extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32);
 
 extern int qla81xx_restart_mpi_firmware(scsi_qla_host_t *);
 
-extern void qla2x00_abort_fcport_cmds(fc_port_t *);
 extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *,
 	struct qla_hw_data *);
 extern void qla2x00_free_host(struct scsi_qla_host *);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index cdb089c..8249352 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -682,44 +682,6 @@ qla2x00_wait_for_loop_ready(scsi_qla_host_t *vha)
 	return (return_status);
 }
 
-void
-qla2x00_abort_fcport_cmds(fc_port_t *fcport)
-{
-	int cnt;
-	unsigned long flags;
-	srb_t *sp;
-	scsi_qla_host_t *vha = fcport->vha;
-	struct qla_hw_data *ha = vha->hw;
-	struct req_que *req;
-
-	spin_lock_irqsave(&ha->hardware_lock, flags);
-	req = vha->req;
-	for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
-		sp = req->outstanding_cmds[cnt];
-		if (!sp)
-			continue;
-		if (sp->fcport != fcport)
-			continue;
-		if (sp->ctx)
-			continue;
-
-		spin_unlock_irqrestore(&ha->hardware_lock, flags);
-		if (ha->isp_ops->abort_command(sp)) {
-			DEBUG2(qla_printk(KERN_WARNING, ha,
-			"Abort failed --  %lx\n",
-			sp->cmd->serial_number));
-		} else {
-			if (qla2x00_eh_wait_on_command(sp->cmd) !=
-				QLA_SUCCESS)
-				DEBUG2(qla_printk(KERN_WARNING, ha,
-				"Abort failed while waiting --  %lx\n",
-				sp->cmd->serial_number));
-		}
-		spin_lock_irqsave(&ha->hardware_lock, flags);
-	}
-	spin_unlock_irqrestore(&ha->hardware_lock, flags);
-}
-
 /**************************************************************************
 * qla2xxx_eh_abort
 *
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 5/8] qla2xxx: Correct loop-resync issues during SNS scans.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
                   ` (3 preceding siblings ...)
  2010-02-18 16:38 ` [PATCH 4/8] qla2xxx: Correct use-after-free issue in terminate_rport_io callback giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 6/8] qla2xxx: Add firmware ETS burst support giridhar.malavali
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

Original code could inadvertently skip the post processing of
port information returned from the SNS scan, if any link-flopping
asynchronous-events were received (noticed in FCAL topologies).

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_init.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 1128c8d..96a609b 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -2910,8 +2910,13 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
 		if (qla2x00_is_reserved_id(vha, loop_id))
 			continue;
 
-		if (atomic_read(&vha->loop_down_timer) || LOOP_TRANSITION(vha))
+		if (atomic_read(&vha->loop_down_timer) ||
+		    LOOP_TRANSITION(vha)) {
+			atomic_set(&vha->loop_down_timer, 0);
+			set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
+			set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
 			break;
+		}
 
 		if (swl != NULL) {
 			if (last_dev) {
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 6/8] qla2xxx: Add firmware ETS burst support.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
                   ` (4 preceding siblings ...)
  2010-02-18 16:38 ` [PATCH 5/8] qla2xxx: Correct loop-resync issues during SNS scans giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 7/8] qla2xxx: EEH: Restore PCI saved state during pci slot reset giridhar.malavali
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Andrew Vasquez <andrew.vasquez@qlogic.com>

Can be used to balance NIC/FCoE traffic distribution.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_gbl.h  |    1 +
 drivers/scsi/qla2xxx/qla_init.c |   11 ++++++++++-
 drivers/scsi/qla2xxx/qla_os.c   |    6 ++++++
 3 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index e201650..3a89bc5 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -78,6 +78,7 @@ extern int ql2xiidmaenable;
 extern int ql2xmaxqueues;
 extern int ql2xmultique_tag;
 extern int ql2xfwloadbin;
+extern int ql2xetsenable;
 
 extern int qla2x00_loop_reset(scsi_qla_host_t *);
 extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 96a609b..a67b2ba 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -4892,6 +4892,15 @@ qla81xx_nvram_config(scsi_qla_host_t *vha)
 }
 
 void
-qla81xx_update_fw_options(scsi_qla_host_t *ha)
+qla81xx_update_fw_options(scsi_qla_host_t *vha)
 {
+	struct qla_hw_data *ha = vha->hw;
+
+	if (!ql2xetsenable)
+		return;
+
+	/* Enable ETS Burst. */
+	memset(ha->fw_options, 0, sizeof(ha->fw_options));
+	ha->fw_options[2] |= BIT_9;
+	qla2x00_set_fw_options(vha, ha->fw_options);
 }
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 8249352..dacc674 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -107,6 +107,12 @@ MODULE_PARM_DESC(ql2xfwloadbin,
 		" 1 -- load firmware from flash.\n"
 		" 0 -- use default semantics.\n");
 
+int ql2xetsenable;
+module_param(ql2xetsenable, int, S_IRUGO|S_IRUSR);
+MODULE_PARM_DESC(ql2xetsenable,
+		"Enables firmware ETS burst."
+		"Default is 0 - skip ETS enablement.");
+
 /*
  * SCSI host template entry points
  */
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 7/8] qla2xxx: EEH: Restore PCI saved state during pci slot reset.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
                   ` (5 preceding siblings ...)
  2010-02-18 16:38 ` [PATCH 6/8] qla2xxx: Add firmware ETS burst support giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:38 ` [PATCH 8/8] qla2xxx: Update version number to 8.03.02-k1 giridhar.malavali
  2010-02-18 16:42 ` [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] James Bottomley
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley
  Cc: giridhar.malavali, andrew.vasquez, linux-scsi, Richard Lary

From: Richard Lary <rlary@us.ibm.com>

Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_os.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index dacc674..bfb2a8c 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -3362,6 +3362,11 @@ qla2xxx_pci_slot_reset(struct pci_dev *pdev)
 
 	pci_restore_state(pdev);
 
+	/* pci_restore_state() clears the saved_state flag of the device
+	 * save restored state which resets saved_state flag
+	 */
+	pci_save_state(pdev);
+
 	if (ha->mem_only)
 		rc = pci_enable_device_mem(pdev);
 	else
-- 
1.6.2.rc1.30.gd43c


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

* [PATCH 8/8] qla2xxx: Update version number to 8.03.02-k1.
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
                   ` (6 preceding siblings ...)
  2010-02-18 16:38 ` [PATCH 7/8] qla2xxx: EEH: Restore PCI saved state during pci slot reset giridhar.malavali
@ 2010-02-18 16:38 ` giridhar.malavali
  2010-02-18 16:42 ` [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] James Bottomley
  8 siblings, 0 replies; 10+ messages in thread
From: giridhar.malavali @ 2010-02-18 16:38 UTC (permalink / raw)
  To: James.Bottomley; +Cc: giridhar.malavali, andrew.vasquez, linux-scsi

From: Giridhar Malavali <giridhar.malavali@qlogic.com>


Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_version.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index 082394b..8d2fc2f 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,9 +7,9 @@
 /*
  * Driver version
  */
-#define QLA2XXX_VERSION      "8.03.02-k0"
+#define QLA2XXX_VERSION      "8.03.02-k1"
 
 #define QLA_DRIVER_MAJOR_VER	8
 #define QLA_DRIVER_MINOR_VER	3
 #define QLA_DRIVER_PATCH_VER	2
-#define QLA_DRIVER_BETA_VER	0
+#define QLA_DRIVER_BETA_VER	1
-- 
1.6.2.rc1.30.gd43c


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

* Re: [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1]
  2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
                   ` (7 preceding siblings ...)
  2010-02-18 16:38 ` [PATCH 8/8] qla2xxx: Update version number to 8.03.02-k1 giridhar.malavali
@ 2010-02-18 16:42 ` James Bottomley
  8 siblings, 0 replies; 10+ messages in thread
From: James Bottomley @ 2010-02-18 16:42 UTC (permalink / raw)
  To: giridhar.malavali; +Cc: andrew.vasquez, linux-scsi

On Thu, 2010-02-18 at 08:38 -0800, giridhar.malavali@qlogic.com wrote:
> From: Giridhar Malavali <giridhar.malavali@qlogic.com>
> 
> James,
> 
> Please apply..

You're very late for this.  I was stabilising the final fixes in
linux-next to send on tomorrow ... assuming Linus plans a Saturday
release, so it might be better just to add cc: stable tags and put them
in scsi-misc.

> Andrew Vasquez (4):
>   qla2xxx: Correct EH bus-reset handling.
>   qla2xxx: Correct use-after-free issue in terminate_rport_io callback.
>   qla2xxx: Correct loop-resync issues during SNS scans.
>   qla2xxx: Add firmware ETS burst support.

How is that last one a bug fix?

James



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

end of thread, other threads:[~2010-02-18 16:42 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-18 16:38 [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] giridhar.malavali
2010-02-18 16:38 ` [PATCH 1/8] qla2xxx: Initialize payload receive lenght in failure path of vendor commands giridhar.malavali
2010-02-18 16:38 ` [PATCH 2/8] qla2xxx: Proper clean-up of BSG requests when request times out giridhar.malavali
2010-02-18 16:38 ` [PATCH 3/8] qla2xxx: Correct EH bus-reset handling giridhar.malavali
2010-02-18 16:38 ` [PATCH 4/8] qla2xxx: Correct use-after-free issue in terminate_rport_io callback giridhar.malavali
2010-02-18 16:38 ` [PATCH 5/8] qla2xxx: Correct loop-resync issues during SNS scans giridhar.malavali
2010-02-18 16:38 ` [PATCH 6/8] qla2xxx: Add firmware ETS burst support giridhar.malavali
2010-02-18 16:38 ` [PATCH 7/8] qla2xxx: EEH: Restore PCI saved state during pci slot reset giridhar.malavali
2010-02-18 16:38 ` [PATCH 8/8] qla2xxx: Update version number to 8.03.02-k1 giridhar.malavali
2010-02-18 16:42 ` [PATCH 0/8] qla2xxx: fixes for 2.6.33-rcX [8.03.02-k1] James Bottomley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox