linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chad Dupuis <chad.dupuis@qlogic.com>
To: jbottomley@parallels.com
Cc: giridhar.malavali@qlogic.com, chad.dupuis@qlogic.com,
	andrew.vasquez@qlogic.com, linux-scsi@vger.kernel.org
Subject: [PATCH 11/29] qla2xxx: Perform implicit logout during rport tear-down.
Date: Thu, 9 Feb 2012 11:15:43 -0800	[thread overview]
Message-ID: <1328814961-21866-12-git-send-email-chad.dupuis@qlogic.com> (raw)
In-Reply-To: <1328814961-21866-1-git-send-email-chad.dupuis@qlogic.com>

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

During rport tear-down, make sure we do an implicit LOGO of the fcport in our
firmware to try to clear any residual commands associated with that fcport.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_attr.c |   12 ++++++++----
 drivers/scsi/qla2xxx/qla_dbg.c  |    3 ++-
 drivers/scsi/qla2xxx/qla_def.h  |    1 +
 drivers/scsi/qla2xxx/qla_gbl.h  |    3 +++
 drivers/scsi/qla2xxx/qla_mbx.c  |   37 +++++++++++++++++++++++++++++++++++++
 5 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 5433f95..e21db2f 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -1647,10 +1647,14 @@ qla2x00_terminate_rport_io(struct fc_rport *rport)
 	 * final cleanup of firmware resources (PCBs and XCBs).
 	 */
 	if (fcport->loop_id != FC_NO_LOOP_ID &&
-	    !test_bit(UNLOADING, &fcport->vha->dpc_flags))
-		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);
+	    !test_bit(UNLOADING, &fcport->vha->dpc_flags)) {
+		if (IS_FWI2_CAPABLE(fcport->vha->hw))
+			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);
+		else
+			qla2x00_port_logout(fcport->vha, fcport);
+	}
 }
 
 static int
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index b85ba1e..4ba30b2 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -12,7 +12,8 @@
  * |             Level            |   Last Value Used  |     Holes	|
  * ----------------------------------------------------------------------
  * | Module Init and Probe        |       0x0120       | 0x4b,0xba,0xfa |
- * | Mailbox commands             |       0x1139       | 0x112c-0x112e  |
+ * | Mailbox commands             |       0x113e       | 0x112c-0x112e  |
+ * |                              |                    | 0x113a         |
  * | Device Discovery             |       0x2085       | 0x2020-0x2022  |
  * | Queue Command and IO tracing |       0x302f       | 0x3006,0x3008  |
  * |                              |                    | 0x302d-0x302e  |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 7a224b7..1281f5b 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -665,6 +665,7 @@ typedef struct {
 #define MBC_CONFIGURE_VF		0x4b	/* Configure VFs */
 #define MBC_RESET_LINK_STATUS		0x52	/* Reset Link Error Status */
 #define MBC_IOCB_COMMAND_A64		0x54	/* Execute IOCB command (64) */
+#define MBC_PORT_LOGOUT			0x56	/* Port Logout request */
 #define MBC_SEND_RNID_ELS		0x57	/* Send RNID ELS request */
 #define MBC_SET_RNID_PARAMS		0x59	/* Set RNID parameters */
 #define MBC_GET_RNID_PARAMS		0x5a	/* Data Rate */
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 87fee23..9f06580 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -367,6 +367,9 @@ qla81xx_get_port_config(scsi_qla_host_t *, uint16_t *);
 extern int
 qla81xx_set_port_config(scsi_qla_host_t *, uint16_t *);
 
+extern int
+qla2x00_port_logout(scsi_qla_host_t *, struct fc_port *);
+
 /*
  * Global Function Prototypes in qla_isr.c source file.
  */
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 50ec272..61e2fb7 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -4502,5 +4502,42 @@ qla83xx_write_remote_reg(scsi_qla_host_t *vha, uint32_t reg, uint32_t data)
 		ql_dbg(ql_dbg_mbx, vha, 0x1132,
 		    "Done %s.\n", __func__);
 	}
+
 	return rval;
 }
+
+int
+qla2x00_port_logout(scsi_qla_host_t *vha, struct fc_port *fcport)
+{
+	int rval;
+	struct qla_hw_data *ha = vha->hw;
+	mbx_cmd_t mc;
+	mbx_cmd_t *mcp = &mc;
+
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
+		ql_dbg(ql_dbg_mbx, vha, 0x113b,
+		    "Implicit LOGO Unsupported.\n");
+		return QLA_FUNCTION_FAILED;
+	}
+
+
+	ql_dbg(ql_dbg_mbx, vha, 0x113c, "Done %s.\n",  __func__);
+
+	/* Perform Implicit LOGO. */
+	mcp->mb[0] = MBC_PORT_LOGOUT;
+	mcp->mb[1] = fcport->loop_id;
+	mcp->mb[10] = BIT_15;
+	mcp->out_mb = MBX_10|MBX_1|MBX_0;
+	mcp->in_mb = MBX_0;
+	mcp->tov = MBX_TOV_SECONDS;
+	mcp->flags = 0;
+	rval = qla2x00_mailbox_command(vha, mcp);
+	if (rval != QLA_SUCCESS)
+		ql_dbg(ql_dbg_mbx, vha, 0x113d,
+		    "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
+	else
+		ql_dbg(ql_dbg_mbx, vha, 0x113e, "Done %s.\n", __func__);
+
+	return rval;
+}
+
-- 
1.6.0.2



  parent reply	other threads:[~2012-02-09 19:32 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-09 19:15 [PATCH 00/29] qla2xxx: Patches for scsi-misc Chad Dupuis
2012-02-09 19:15 ` [PATCH 01/29] qla2xxx: Enhanced the dump routines to capture multiple request and response queues Chad Dupuis
2012-02-09 19:15 ` [PATCH 02/29] qla2xxx: Enhancements to support ISP83xx Chad Dupuis
2012-02-09 19:15 ` [PATCH 03/29] qla2xxx: Use a valid enode-mac if none defined Chad Dupuis
2012-02-09 19:15 ` [PATCH 04/29] qla2xxx: Consolidation of SRB processing Chad Dupuis
2012-02-09 19:15 ` [PATCH 05/29] qla2xxx: Use consistent DL mask for ELS/CT passthru requests Chad Dupuis
2012-02-09 19:15 ` [PATCH 06/29] qla2xxx: Correct print format for edc ql_log() calls Chad Dupuis
2012-02-09 19:15 ` [PATCH 07/29] qla2xxx: Handle change notifications based on switch scan results Chad Dupuis
2012-02-09 19:15 ` [PATCH 08/29] qla2xxx: Return blank sysfs string on initial get thermal failure Chad Dupuis
2012-02-09 19:15 ` [PATCH 09/29] qla2xxx: Increase speed of flash access in ISP82xx adapters to improve firmware load speed Chad Dupuis
2012-02-09 19:15 ` [PATCH 10/29] qla2xxx: Handle failure cases during fabric_login Chad Dupuis
2012-02-09 19:15 ` Chad Dupuis [this message]
2012-02-09 19:15 ` [PATCH 12/29] qla2xxx: Prep zero-length BSG data-transfer requests Chad Dupuis
2012-02-09 19:15 ` [PATCH 13/29] qla2xxx: Reduce mbx-command timeout for Login/Logout requests Chad Dupuis
2012-02-09 19:15 ` [PATCH 14/29] qla2xxx: Print mailbox command opcode and return code when a command times out Chad Dupuis
2012-02-09 19:15 ` [PATCH 15/29] qla2xxx: Convert remaining printk's to ql_log format Chad Dupuis
2012-02-09 19:15 ` [PATCH 16/29] qla2xxx: Use ql_log* #define's in ql_log() and ql_log_pci() Chad Dupuis
2012-02-09 19:15 ` [PATCH 17/29] qla2xxx: Fix ql_dbg arguments Chad Dupuis
2012-02-09 19:15 ` [PATCH 18/29] qla2xxx: Add new message when a new loopid is assigned Chad Dupuis
2012-02-09 19:15 ` [PATCH 19/29] qla2xxx: Log messages to use correct vha Chad Dupuis
2012-02-09 19:15 ` [PATCH 20/29] qla2xxx: Change the log message when previous dump is available to retrieve for ISP82xx Chad Dupuis
2012-02-09 19:15 ` [PATCH 21/29] qla2xxx: Perform firmware dump procedure on mailbox command timeout Chad Dupuis
2012-02-09 19:15 ` [PATCH 22/29] qla2xxx: Update LICENSE.qla2xxx Chad Dupuis
2012-02-09 19:15 ` [PATCH 23/29] qla2xxx: Remove EDC sysfs interface Chad Dupuis
2012-02-09 19:15 ` [PATCH 24/29] qla2xxx: Cache swl during fabric discovery Chad Dupuis
2012-02-09 19:15 ` [PATCH 25/29] qla2xxx: Add ha->max_fibre_devices to keep track of the maximum number of targets Chad Dupuis
2012-02-19 14:33   ` James Bottomley
2012-02-09 19:15 ` [PATCH 26/29] qla2xxx: Handle device mapping changes due to device logout Chad Dupuis
2012-02-09 19:15 ` [PATCH 27/29] qla2xxx: Fix incorrect register access in qla2x00_start_iocbs() Chad Dupuis
2012-02-09 19:16 ` [PATCH 28/29] qla2xxx: Stop iteration after first failure in *_id functions Chad Dupuis
2012-02-09 19:16 ` [PATCH 29/29] qla2xxx: Avoid invalid request queue dereference for bad response packets Chad Dupuis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328814961-21866-12-git-send-email-chad.dupuis@qlogic.com \
    --to=chad.dupuis@qlogic.com \
    --cc=andrew.vasquez@qlogic.com \
    --cc=giridhar.malavali@qlogic.com \
    --cc=jbottomley@parallels.com \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).