linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch
@ 2013-12-16 11:49 vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 01/24] qla4xxx: ISP8xxx: Correct retry of adapter initialization vikas.chaudhary
                   ` (24 more replies)
  0 siblings, 25 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

James,

Please apply the following patches to the scsi tree at your earliest convenience.
These patches are on top of other qla4xxx patch posted on list here:
http://marc.info/?l=linux-scsi&m=138511809612830&w=2

Nilesh Javali (5):
      qla4xxx: ISP8xxx: Correct retry of adapter initialization
      qla4xxx: Improve loopback failure messages
      qla4xxx: Rename ACB_STATE macros with IP_ADDRSTATE macros
      qla4xxx: Clear DDB index map upon connection close failure
      qla4xxx: Handle IPv6 AEN notifications

Tej Parkash (4):
      qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx
      qla4xxx: Fix processing response queue during probe
      qla4xxx: Fix pending IO completion in reset path before initiating chip reset
      qla4xxx: Driver not able to collect minidump for ISP84xx

Vikas Chaudhary (15):
      qla4xxx: Print WARN_ONCE() if iSCSI function presence bit removed
      qla4xxx: Fix comments in code
      qla4xxx: Use IDC_CTRL bit1 directly instead of AF_83XX_NO_FWDUMP flag.
      qla4xxx: Correctly handle msleep_interruptible
      qla4xxx: Return correct error status from func qla4xxx_request_irqs()
      qla4xxx: Fix failure of IDC Time Extend mailbox command
      qla4xxx: Reduce rom-lock contention during reset recovery.
      qla4xxx: Fix failure of mbox 0x31
      qla4xxx: Remove unused code from qla4xxx_set_ifcb()
      qla4xxx: Updated print for device login, logout path
      qla4xxx: Update print statements in qla4xxx_mailbox_command()
      qla4xxx: Update print statements in func qla4xxx_eh_abort()
      qla4xxx: Update print statements in func qla4xxx_do_dpc()
      qla4xxx: Fix sparse warnings
      qla4xxx: Update driver version to 5.04.00-k4

Thanks,
Vikas.

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

* [PATCH 01/24] qla4xxx: ISP8xxx: Correct retry of adapter initialization
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 02/24] qla4xxx: Print WARN_ONCE() if iSCSI function presence bit removed vikas.chaudhary
                   ` (23 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Nilesh Javali

From: Nilesh Javali <nilesh.javali@qlogic.com>

Issue:
For ISP8xxx, adapter initialization is not retried if qla4xxx_initialize_adapter
fails.

Fix:
If qla4xxx_initialize_adapter fails, first check if failure is due to IRQs not
attached in order to skip retrial, then free the IRQs and then retry initializing
the adapter.

Signed-off-by: Nilesh Javali <nilesh.javali@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_glbl.h |  1 +
 drivers/scsi/qla4xxx/ql4_init.c |  7 +------
 drivers/scsi/qla4xxx/ql4_nx.c   | 21 +++++++++++++++++++++
 drivers/scsi/qla4xxx/ql4_os.c   | 27 ++++++++++++++++++++++-----
 4 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_glbl.h b/drivers/scsi/qla4xxx/ql4_glbl.h
index d67c50e..6d72e1d 100644
--- a/drivers/scsi/qla4xxx/ql4_glbl.h
+++ b/drivers/scsi/qla4xxx/ql4_glbl.h
@@ -279,6 +279,7 @@ int qla4_83xx_ms_mem_write_128b(struct scsi_qla_host *ha,
 uint8_t qla4xxx_set_ipaddr_state(uint8_t fw_ipaddr_state);
 int qla4_83xx_get_port_config(struct scsi_qla_host *ha, uint32_t *config);
 int qla4_83xx_set_port_config(struct scsi_qla_host *ha, uint32_t *config);
+int qla4_8xxx_check_init_adapter_retry(struct scsi_qla_host *ha);
 
 extern int ql4xextended_error_logging;
 extern int ql4xdontresethba;
diff --git a/drivers/scsi/qla4xxx/ql4_init.c b/drivers/scsi/qla4xxx/ql4_init.c
index 7456eeb..28fbece 100644
--- a/drivers/scsi/qla4xxx/ql4_init.c
+++ b/drivers/scsi/qla4xxx/ql4_init.c
@@ -959,13 +959,8 @@ int qla4xxx_initialize_adapter(struct scsi_qla_host *ha, int is_reset)
 		qla4xxx_build_ddb_list(ha, is_reset);
 
 	set_bit(AF_ONLINE, &ha->flags);
-exit_init_hba:
-	if (is_qla80XX(ha) && (status == QLA_ERROR)) {
-		/* Since interrupts are registered in start_firmware for
-		 * 80XX, release them here if initialize_adapter fails */
-		qla4xxx_free_irqs(ha);
-	}
 
+exit_init_hba:
 	DEBUG2(printk("scsi%ld: initialize adapter: %s\n", ha->host_no,
 	    status == QLA_ERROR ? "FAILED" : "SUCCEEDED"));
 	return status;
diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index d001202..bbe8361 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -3836,3 +3836,24 @@ qla4_8xxx_enable_msix(struct scsi_qla_host *ha)
 msix_out:
 	return ret;
 }
+
+int qla4_8xxx_check_init_adapter_retry(struct scsi_qla_host *ha)
+{
+	int status = QLA_SUCCESS;
+
+	/* Dont retry adapter initialization if IRQ allocation failed */
+	if (!test_bit(AF_IRQ_ATTACHED, &ha->flags)) {
+		ql4_printk(KERN_WARNING, ha, "%s: Skipping retry of adapter initialization as IRQs are not attached\n",
+			   __func__);
+		status = QLA_ERROR;
+		goto exit_init_adapter_failure;
+	}
+
+	/* Since interrupts are registered in start_firmware for
+	 * 8xxx, release them here if initialize_adapter fails
+	 * and retry adapter initialization */
+	qla4xxx_free_irqs(ha);
+
+exit_init_adapter_failure:
+	return status;
+}
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index c21adc3..9803c9e 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -4881,8 +4881,21 @@ recover_ha_init_adapter:
 			ssleep(6);
 
 		/* NOTE: AF_ONLINE flag set upon successful completion of
-		 *       qla4xxx_initialize_adapter */
+		 * qla4xxx_initialize_adapter */
 		status = qla4xxx_initialize_adapter(ha, RESET_ADAPTER);
+		if (is_qla80XX(ha) && (status == QLA_ERROR)) {
+			status = qla4_8xxx_check_init_adapter_retry(ha);
+			if (status == QLA_ERROR) {
+				ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Don't retry recover adapter\n",
+					   ha->host_no, __func__);
+				qla4xxx_dead_adapter_cleanup(ha);
+				clear_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags);
+				clear_bit(DPC_RESET_HA, &ha->dpc_flags);
+				clear_bit(DPC_RESET_HA_FW_CONTEXT,
+					  &ha->dpc_flags);
+				goto exit_recover;
+			}
+		}
 	}
 
 	/* Retry failed adapter initialization, if necessary
@@ -8681,11 +8694,8 @@ static int qla4xxx_probe_adapter(struct pci_dev *pdev,
 	status = qla4xxx_initialize_adapter(ha, INIT_ADAPTER);
 
 	/* Dont retry adapter initialization if IRQ allocation failed */
-	if (is_qla80XX(ha) && !test_bit(AF_IRQ_ATTACHED, &ha->flags)) {
-		ql4_printk(KERN_WARNING, ha, "%s: Skipping retry of adapter initialization\n",
-			   __func__);
+	if (is_qla80XX(ha) && (status == QLA_ERROR))
 		goto skip_retry_init;
-	}
 
 	while ((!test_bit(AF_ONLINE, &ha->flags)) &&
 	    init_retry_count++ < MAX_INIT_RETRIES) {
@@ -8709,6 +8719,10 @@ static int qla4xxx_probe_adapter(struct pci_dev *pdev,
 			continue;
 
 		status = qla4xxx_initialize_adapter(ha, INIT_ADAPTER);
+		if (is_qla80XX(ha) && (status == QLA_ERROR)) {
+			if (qla4_8xxx_check_init_adapter_retry(ha) == QLA_ERROR)
+				goto skip_retry_init;
+		}
 	}
 
 skip_retry_init:
@@ -9615,6 +9629,7 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha)
 		if (rval != QLA_SUCCESS) {
 			ql4_printk(KERN_INFO, ha, "scsi%ld: %s: HW State: "
 			    "FAILED\n", ha->host_no, __func__);
+			qla4xxx_free_irqs(ha);
 			ha->isp_ops->idc_lock(ha);
 			qla4_8xxx_clear_drv_active(ha);
 			qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE,
@@ -9642,6 +9657,8 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha)
 			rval = qla4xxx_initialize_adapter(ha, RESET_ADAPTER);
 			if (rval == QLA_SUCCESS)
 				ha->isp_ops->enable_intrs(ha);
+			else
+				qla4xxx_free_irqs(ha);
 
 			ha->isp_ops->idc_lock(ha);
 			qla4_8xxx_set_drv_active(ha);
-- 
1.8.2.GIT


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

* [PATCH 02/24] qla4xxx: Print WARN_ONCE() if iSCSI function presence bit removed
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 01/24] qla4xxx: ISP8xxx: Correct retry of adapter initialization vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 03/24] qla4xxx: Fix comments in code vikas.chaudhary
                   ` (22 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_83xx.c | 20 ++++++++++++++++++++
 drivers/scsi/qla4xxx/ql4_glbl.h |  1 +
 drivers/scsi/qla4xxx/ql4_os.c   |  5 +++++
 3 files changed, 26 insertions(+)

diff --git a/drivers/scsi/qla4xxx/ql4_83xx.c b/drivers/scsi/qla4xxx/ql4_83xx.c
index 8196c2f..43c1688 100644
--- a/drivers/scsi/qla4xxx/ql4_83xx.c
+++ b/drivers/scsi/qla4xxx/ql4_83xx.c
@@ -1664,3 +1664,23 @@ void qla4_83xx_disable_pause(struct scsi_qla_host *ha)
 	__qla4_83xx_disable_pause(ha);
 	ha->isp_ops->idc_unlock(ha);
 }
+
+/**
+ * qla4_83xx_is_detached - Check if we are marked invisible.
+ * @ha: Pointer to host adapter structure.
+ **/
+int qla4_83xx_is_detached(struct scsi_qla_host *ha)
+{
+	uint32_t drv_active;
+
+	drv_active = qla4_8xxx_rd_direct(ha, QLA8XXX_CRB_DRV_ACTIVE);
+
+	if (test_bit(AF_INIT_DONE, &ha->flags) &&
+	    !(drv_active & (1 << ha->func_num))) {
+		DEBUG2(ql4_printk(KERN_INFO, ha, "%s: drv_active = 0x%X\n",
+				  __func__, drv_active));
+		return QLA_SUCCESS;
+	}
+
+	return QLA_ERROR;
+}
diff --git a/drivers/scsi/qla4xxx/ql4_glbl.h b/drivers/scsi/qla4xxx/ql4_glbl.h
index 6d72e1d..b1a19cd 100644
--- a/drivers/scsi/qla4xxx/ql4_glbl.h
+++ b/drivers/scsi/qla4xxx/ql4_glbl.h
@@ -280,6 +280,7 @@ uint8_t qla4xxx_set_ipaddr_state(uint8_t fw_ipaddr_state);
 int qla4_83xx_get_port_config(struct scsi_qla_host *ha, uint32_t *config);
 int qla4_83xx_set_port_config(struct scsi_qla_host *ha, uint32_t *config);
 int qla4_8xxx_check_init_adapter_retry(struct scsi_qla_host *ha);
+int qla4_83xx_is_detached(struct scsi_qla_host *ha);
 
 extern int ql4xextended_error_logging;
 extern int ql4xdontresethba;
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 9803c9e..e6fa19c 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -4372,6 +4372,11 @@ void qla4_8xxx_watchdog(struct scsi_qla_host *ha)
 	uint32_t dev_state;
 	uint32_t idc_ctrl;
 
+	if (is_qla8032(ha) &&
+	    (qla4_83xx_is_detached(ha) == QLA_SUCCESS))
+		WARN_ONCE(1, "%s: iSCSI function %d marked invisible\n",
+			  __func__, ha->func_num);
+
 	/* don't poll if reset is going on */
 	if (!(test_bit(DPC_RESET_ACTIVE, &ha->dpc_flags) ||
 	    test_bit(DPC_RESET_HA, &ha->dpc_flags) ||
-- 
1.8.2.GIT


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

* [PATCH 03/24] qla4xxx: Fix comments in code
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 01/24] qla4xxx: ISP8xxx: Correct retry of adapter initialization vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 02/24] qla4xxx: Print WARN_ONCE() if iSCSI function presence bit removed vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 04/24] qla4xxx: Use IDC_CTRL bit1 directly instead of AF_83XX_NO_FWDUMP flag vikas.chaudhary
                   ` (21 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_def.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
index aa67bb9..e9df4ad 100644
--- a/drivers/scsi/qla4xxx/ql4_def.h
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -595,10 +595,10 @@ struct scsi_qla_host {
 #define DPC_AEN				9 /* 0x00000200 */
 #define DPC_GET_DHCP_IP_ADDR		15 /* 0x00008000 */
 #define DPC_LINK_CHANGED		18 /* 0x00040000 */
-#define DPC_RESET_ACTIVE		20 /* 0x00040000 */
-#define DPC_HA_UNRECOVERABLE		21 /* 0x00080000 ISP-82xx only*/
-#define DPC_HA_NEED_QUIESCENT		22 /* 0x00100000 ISP-82xx only*/
-#define DPC_POST_IDC_ACK		23 /* 0x00200000 */
+#define DPC_RESET_ACTIVE		20 /* 0x00100000 */
+#define DPC_HA_UNRECOVERABLE		21 /* 0x00200000 ISP-82xx only*/
+#define DPC_HA_NEED_QUIESCENT		22 /* 0x00400000 ISP-82xx only*/
+#define DPC_POST_IDC_ACK		23 /* 0x00800000 */
 #define DPC_RESTORE_ACB			24 /* 0x01000000 */
 
 	struct Scsi_Host *host; /* pointer to host data */
-- 
1.8.2.GIT


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

* [PATCH 04/24] qla4xxx: Use IDC_CTRL bit1 directly instead of AF_83XX_NO_FWDUMP flag.
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (2 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 03/24] qla4xxx: Fix comments in code vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 05/24] qla4xxx: Improve loopback failure messages vikas.chaudhary
                   ` (20 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Removed AF_83XX_NO_FWDUMP flag and directly checking IDC_CTRL bit1
while taking minidump, to check for graceful reset.

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_83xx.c | 16 ++++++++++++++--
 drivers/scsi/qla4xxx/ql4_def.h  |  1 -
 drivers/scsi/qla4xxx/ql4_nx.c   | 15 +--------------
 3 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_83xx.c b/drivers/scsi/qla4xxx/ql4_83xx.c
index 43c1688..e80e82f 100644
--- a/drivers/scsi/qla4xxx/ql4_83xx.c
+++ b/drivers/scsi/qla4xxx/ql4_83xx.c
@@ -1304,12 +1304,24 @@ static void qla4_83xx_process_init_seq(struct scsi_qla_host *ha)
 static int qla4_83xx_restart(struct scsi_qla_host *ha)
 {
 	int ret_val = QLA_SUCCESS;
+	uint32_t idc_ctrl;
 
 	qla4_83xx_process_stop_seq(ha);
 
-	/* Collect minidump*/
-	if (!test_and_clear_bit(AF_83XX_NO_FW_DUMP, &ha->flags))
+	/*
+	 * Collect minidump.
+	 * If IDC_CTRL BIT1 is set, clear it on going to INIT state and
+	 * don't collect minidump
+	 */
+	idc_ctrl = qla4_83xx_rd_reg(ha, QLA83XX_IDC_DRV_CTRL);
+	if (idc_ctrl & GRACEFUL_RESET_BIT1) {
+		qla4_83xx_wr_reg(ha, QLA83XX_IDC_DRV_CTRL,
+				 (idc_ctrl & ~GRACEFUL_RESET_BIT1));
+		ql4_printk(KERN_INFO, ha, "%s: Graceful RESET: Not collecting minidump\n",
+			   __func__);
+	} else {
 		qla4_8xxx_get_minidump(ha);
+	}
 
 	qla4_83xx_process_init_seq(ha);
 
diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
index e9df4ad..5236337 100644
--- a/drivers/scsi/qla4xxx/ql4_def.h
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -580,7 +580,6 @@ struct scsi_qla_host {
 #define AF_82XX_FW_DUMPED		24 /* 0x01000000 */
 #define AF_8XXX_RST_OWNER		25 /* 0x02000000 */
 #define AF_82XX_DUMP_READING		26 /* 0x04000000 */
-#define AF_83XX_NO_FW_DUMP		27 /* 0x08000000 */
 #define AF_83XX_IOCB_INTR_ON		28 /* 0x10000000 */
 #define AF_83XX_MBOX_INTR_ON		29 /* 0x20000000 */
 
diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index bbe8361..0ec07ec 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -2821,7 +2821,7 @@ int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha)
 {
 	int rval = QLA_ERROR;
 	int i, timeout;
-	uint32_t old_count, count, idc_ctrl;
+	uint32_t old_count, count;
 	int need_reset = 0, peg_stuck = 1;
 
 	need_reset = ha->isp_ops->need_reset(ha);
@@ -2864,19 +2864,6 @@ dev_initialize:
 	qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE,
 			    QLA8XXX_DEV_INITIALIZING);
 
-	/*
-	 * For ISP8324 and ISP8042, if IDC_CTRL GRACEFUL_RESET_BIT1 is set,
-	 * reset it after device goes to INIT state.
-	 */
-	if (is_qla8032(ha) || is_qla8042(ha)) {
-		idc_ctrl = qla4_83xx_rd_reg(ha, QLA83XX_IDC_DRV_CTRL);
-		if (idc_ctrl & GRACEFUL_RESET_BIT1) {
-			qla4_83xx_wr_reg(ha, QLA83XX_IDC_DRV_CTRL,
-					 (idc_ctrl & ~GRACEFUL_RESET_BIT1));
-			set_bit(AF_83XX_NO_FW_DUMP, &ha->flags);
-		}
-	}
-
 	ha->isp_ops->idc_unlock(ha);
 
 	if (is_qla8022(ha))
-- 
1.8.2.GIT


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

* [PATCH 05/24] qla4xxx: Improve loopback failure messages
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (3 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 04/24] qla4xxx: Use IDC_CTRL bit1 directly instead of AF_83XX_NO_FWDUMP flag vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 06/24] qla4xxx: Rename ACB_STATE macros with IP_ADDRSTATE macros vikas.chaudhary
                   ` (19 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Nilesh Javali

From: Nilesh Javali <nilesh.javali@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_bsg.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_bsg.c b/drivers/scsi/qla4xxx/ql4_bsg.c
index 04a0027..9f92cbf 100644
--- a/drivers/scsi/qla4xxx/ql4_bsg.c
+++ b/drivers/scsi/qla4xxx/ql4_bsg.c
@@ -517,7 +517,7 @@ static int qla4_83xx_wait_for_loopback_config_comp(struct scsi_qla_host *ha,
 						(ha->idc_extend_tmo * HZ))) {
 				ha->notify_idc_comp = 0;
 				ha->notify_link_up_comp = 0;
-				ql4_printk(KERN_WARNING, ha, "%s: IDC Complete notification not received",
+				ql4_printk(KERN_WARNING, ha, "%s: Aborting: IDC Complete notification not received",
 					   __func__);
 				status = QLA_ERROR;
 				goto exit_wait;
@@ -538,7 +538,7 @@ static int qla4_83xx_wait_for_loopback_config_comp(struct scsi_qla_host *ha,
 		if (!wait_for_completion_timeout(&ha->link_up_comp,
 						 (IDC_COMP_TOV * HZ))) {
 			ha->notify_link_up_comp = 0;
-			ql4_printk(KERN_WARNING, ha, "%s: LINK UP notification not received",
+			ql4_printk(KERN_WARNING, ha, "%s: Aborting: LINK UP notification not received",
 				   __func__);
 			status = QLA_ERROR;
 			goto exit_wait;
-- 
1.8.2.GIT


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

* [PATCH 06/24] qla4xxx: Rename ACB_STATE macros with IP_ADDRSTATE macros
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (4 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 05/24] qla4xxx: Improve loopback failure messages vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 07/24] qla4xxx: Correctly handle msleep_interruptible vikas.chaudhary
                   ` (18 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Nilesh Javali

From: Nilesh Javali <nilesh.javali@qlogic.com>

Signed-off-by: Nilesh Javali <nilesh.javali@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_fw.h  | 24 ++++++++----------------
 drivers/scsi/qla4xxx/ql4_isr.c | 14 +++++++-------
 2 files changed, 15 insertions(+), 23 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_fw.h b/drivers/scsi/qla4xxx/ql4_fw.h
index 8d4092b..e3242df 100644
--- a/drivers/scsi/qla4xxx/ql4_fw.h
+++ b/drivers/scsi/qla4xxx/ql4_fw.h
@@ -528,14 +528,14 @@ struct qla_flt_region {
 #define ACB_CONFIG_DISABLE		0x00
 #define ACB_CONFIG_SET			0x01
 
-/* ACB State Defines */
-#define ACB_STATE_UNCONFIGURED	0x00
-#define ACB_STATE_INVALID	0x01
-#define ACB_STATE_ACQUIRING	0x02
-#define ACB_STATE_TENTATIVE	0x03
-#define ACB_STATE_DEPRICATED	0x04
-#define ACB_STATE_VALID		0x05
-#define ACB_STATE_DISABLING	0x06
+/* ACB/IP Address State Defines */
+#define IP_ADDRSTATE_UNCONFIGURED	0
+#define IP_ADDRSTATE_INVALID		1
+#define IP_ADDRSTATE_ACQUIRING		2
+#define IP_ADDRSTATE_TENTATIVE		3
+#define IP_ADDRSTATE_DEPRICATED		4
+#define IP_ADDRSTATE_PREFERRED		5
+#define IP_ADDRSTATE_DISABLING		6
 
 /* FLASH offsets */
 #define FLASH_SEGMENT_IFCB	0x04000000
@@ -698,14 +698,6 @@ struct addr_ctrl_blk {
 	uint8_t ipv6_lnk_lcl_addr_state;/* 222 */
 	uint8_t ipv6_addr0_state;	/* 223 */
 	uint8_t ipv6_addr1_state;	/* 224 */
-#define IP_ADDRSTATE_UNCONFIGURED	0
-#define IP_ADDRSTATE_INVALID		1
-#define IP_ADDRSTATE_ACQUIRING		2
-#define IP_ADDRSTATE_TENTATIVE		3
-#define IP_ADDRSTATE_DEPRICATED		4
-#define IP_ADDRSTATE_PREFERRED		5
-#define IP_ADDRSTATE_DISABLING		6
-
 	uint8_t ipv6_dflt_rtr_state;    /* 225 */
 #define IPV6_RTRSTATE_UNKNOWN                   0
 #define IPV6_RTRSTATE_MANUAL                    1
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index a3c8bc7..e56c6b4 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -781,21 +781,21 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
 						    mbox_sts[3]);
 			/* mbox_sts[2] = Old ACB state
 			 * mbox_sts[3] = new ACB state */
-			if ((mbox_sts[3] == ACB_STATE_VALID) &&
-			    ((mbox_sts[2] == ACB_STATE_TENTATIVE) ||
-			    (mbox_sts[2] == ACB_STATE_ACQUIRING))) {
+			if ((mbox_sts[3] == IP_ADDRSTATE_PREFERRED) &&
+			    ((mbox_sts[2] == IP_ADDRSTATE_TENTATIVE) ||
+			     (mbox_sts[2] == IP_ADDRSTATE_ACQUIRING))) {
 				set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags);
-			} else if ((mbox_sts[3] == ACB_STATE_ACQUIRING) &&
-				   (mbox_sts[2] == ACB_STATE_VALID)) {
+			} else if ((mbox_sts[3] == IP_ADDRSTATE_ACQUIRING) &&
+				   (mbox_sts[2] == IP_ADDRSTATE_PREFERRED)) {
 				if (is_qla80XX(ha))
 					set_bit(DPC_RESET_HA_FW_CONTEXT,
 						&ha->dpc_flags);
 				else
 					set_bit(DPC_RESET_HA, &ha->dpc_flags);
-			} else if (mbox_sts[3] == ACB_STATE_DISABLING) {
+			} else if (mbox_sts[3] == IP_ADDRSTATE_DISABLING) {
 				ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB in disabling state\n",
 					   ha->host_no, __func__);
-			} else if ((mbox_sts[3] == ACB_STATE_UNCONFIGURED)) {
+			} else if (mbox_sts[3] == IP_ADDRSTATE_UNCONFIGURED) {
 				complete(&ha->disable_acb_comp);
 				ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB state unconfigured\n",
 					   ha->host_no, __func__);
-- 
1.8.2.GIT


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

* [PATCH 07/24] qla4xxx: Correctly handle msleep_interruptible
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (5 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 06/24] qla4xxx: Rename ACB_STATE macros with IP_ADDRSTATE macros vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 08/24] qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx vikas.chaudhary
                   ` (17 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

If waiting for signals was interrupted then the device was put to
FAILED state. Use msleep instead of msleep_interruptible to handle
this correctly.

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_nx.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index 0ec07ec..cbc68f9 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -2820,7 +2820,7 @@ void qla4_8xxx_get_minidump(struct scsi_qla_host *ha)
 int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha)
 {
 	int rval = QLA_ERROR;
-	int i, timeout;
+	int i;
 	uint32_t old_count, count;
 	int need_reset = 0, peg_stuck = 1;
 
@@ -2828,13 +2828,7 @@ int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha)
 	old_count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER);
 
 	for (i = 0; i < 10; i++) {
-		timeout = msleep_interruptible(200);
-		if (timeout) {
-			qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE,
-					    QLA8XXX_DEV_FAILED);
-			return rval;
-		}
-
+		msleep(200);
 		count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER);
 		if (count != old_count)
 			peg_stuck = 0;
-- 
1.8.2.GIT


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

* [PATCH 08/24] qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (6 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 07/24] qla4xxx: Correctly handle msleep_interruptible vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 09/24] qla4xxx: Return correct error status from func qla4xxx_request_irqs() vikas.chaudhary
                   ` (16 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Tej Parkash

From: Tej Parkash <tej.parkash@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_def.h |  3 ++-
 drivers/scsi/qla4xxx/ql4_os.c  | 46 +++++++++++++++++++++++++-----------------
 2 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
index 5236337..4e11133 100644
--- a/drivers/scsi/qla4xxx/ql4_def.h
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -909,7 +909,8 @@ static inline int is_qla80XX(struct scsi_qla_host *ha)
 static inline int is_aer_supported(struct scsi_qla_host *ha)
 {
 	return ((ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8022) ||
-		(ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8324));
+		(ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8324) ||
+		(ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8042));
 }
 
 static inline int adapter_up(struct scsi_qla_host *ha)
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index e6fa19c..a78edc3 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -9579,28 +9579,36 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha)
 	}
 
 	fn = PCI_FUNC(ha->pdev->devfn);
-	while (fn > 0) {
-		fn--;
-		ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at "
-		    "func %x\n", ha->host_no, __func__, fn);
-		/* Get the pci device given the domain, bus,
-		 * slot/function number */
-		other_pdev =
-		    pci_get_domain_bus_and_slot(pci_domain_nr(ha->pdev->bus),
-		    ha->pdev->bus->number, PCI_DEVFN(PCI_SLOT(ha->pdev->devfn),
-		    fn));
-
-		if (!other_pdev)
-			continue;
+	if (is_qla8022(ha)) {
+		while (fn > 0) {
+			fn--;
+			ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at func %x\n",
+				   ha->host_no, __func__, fn);
+			/* Get the pci device given the domain, bus,
+			 * slot/function number */
+			other_pdev = pci_get_domain_bus_and_slot(
+					   pci_domain_nr(ha->pdev->bus),
+					   ha->pdev->bus->number,
+					   PCI_DEVFN(PCI_SLOT(ha->pdev->devfn),
+					   fn));
+
+			if (!other_pdev)
+				continue;
 
-		if (atomic_read(&other_pdev->enable_cnt)) {
-			ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Found PCI "
-			    "func in enabled state%x\n", ha->host_no,
-			    __func__, fn);
+			if (atomic_read(&other_pdev->enable_cnt)) {
+				ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Found PCI func in enabled state%x\n",
+					   ha->host_no, __func__, fn);
+				pci_dev_put(other_pdev);
+				break;
+			}
 			pci_dev_put(other_pdev);
-			break;
 		}
-		pci_dev_put(other_pdev);
+	} else {
+		/* this case is meant for ISP83xx/ISP84xx only */
+		if (qla4_83xx_can_perform_reset(ha)) {
+			/* reset fn as iSCSI is going to perform the reset */
+			fn = 0;
+		}
 	}
 
 	/* The first function on the card, the reset owner will
-- 
1.8.2.GIT


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

* [PATCH 09/24] qla4xxx: Return correct error status from func qla4xxx_request_irqs()
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (7 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 08/24] qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 10/24] qla4xxx: Clear DDB index map upon connection close failure vikas.chaudhary
                   ` (15 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_isr.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index e56c6b4..49032f6 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -1488,6 +1488,7 @@ void qla4xxx_process_aen(struct scsi_qla_host * ha, uint8_t process_aen)
 int qla4xxx_request_irqs(struct scsi_qla_host *ha)
 {
 	int ret;
+	int rval = QLA_ERROR;
 
 	if (is_qla40XX(ha))
 		goto try_intx;
@@ -1568,9 +1569,10 @@ irq_attached:
 	set_bit(AF_IRQ_ATTACHED, &ha->flags);
 	ha->host->irq = ha->pdev->irq;
 	ql4_printk(KERN_INFO, ha, "%s: irq %d attached\n",
-	    __func__, ha->pdev->irq);
+		   __func__, ha->pdev->irq);
+	rval = QLA_SUCCESS;
 irq_not_attached:
-	return ret;
+	return rval;
 }
 
 void qla4xxx_free_irqs(struct scsi_qla_host *ha)
-- 
1.8.2.GIT


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

* [PATCH 10/24] qla4xxx: Clear DDB index map upon connection close failure
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (8 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 09/24] qla4xxx: Return correct error status from func qla4xxx_request_irqs() vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 11/24] qla4xxx: Fix failure of IDC Time Extend mailbox command vikas.chaudhary
                   ` (14 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Nilesh Javali

From: Nilesh Javali <nilesh.javali@qlogic.com>

Issue:
qla4xxx Unable to clear DDB indices when logout fails due to
failure of connection close mbox command.

Root cause:
If login to session fail, iscsiadm make call to destroy_session.
qla4xxx driver does not free ddb index map before free_ddb()

Fix:
Clear DDB Index map before free_ddb in "destroy_session"
in case of connection close mailbox command failure with 4005h.

Signed-off-by: Nilesh Javali <nilesh.javali@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_def.h | 2 ++
 drivers/scsi/qla4xxx/ql4_fw.h  | 1 +
 drivers/scsi/qla4xxx/ql4_mbx.c | 4 ++++
 drivers/scsi/qla4xxx/ql4_os.c  | 4 +++-
 4 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
index 4e11133..33eae2e 100644
--- a/drivers/scsi/qla4xxx/ql4_def.h
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -297,6 +297,8 @@ struct ddb_entry {
 
 	/* Driver Re-login  */
 	unsigned long flags;		  /* DDB Flags */
+#define DDB_CONN_CLOSE_FAILURE		0 /* 0x00000001 */
+
 	uint16_t default_relogin_timeout; /*  Max time to wait for
 					   *  relogin to complete */
 	atomic_t retry_relogin_timer;	  /* Min Time between relogins
diff --git a/drivers/scsi/qla4xxx/ql4_fw.h b/drivers/scsi/qla4xxx/ql4_fw.h
index e3242df..a94593a 100644
--- a/drivers/scsi/qla4xxx/ql4_fw.h
+++ b/drivers/scsi/qla4xxx/ql4_fw.h
@@ -390,6 +390,7 @@ struct qla_flt_region {
 #define MBOX_CMD_CLEAR_DATABASE_ENTRY		0x0031
 #define MBOX_CMD_CONN_OPEN			0x0074
 #define MBOX_CMD_CONN_CLOSE_SESS_LOGOUT		0x0056
+#define DDB_NOT_LOGGED_IN			0x09
 #define LOGOUT_OPTION_CLOSE_SESSION		0x0002
 #define LOGOUT_OPTION_RELOGIN			0x0004
 #define LOGOUT_OPTION_FREE_DDB			0x0008
diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
index 7da0646..023f2dd 100644
--- a/drivers/scsi/qla4xxx/ql4_mbx.c
+++ b/drivers/scsi/qla4xxx/ql4_mbx.c
@@ -1002,6 +1002,10 @@ int qla4xxx_session_logout_ddb(struct scsi_qla_host *ha,
 				  "%s: MBOX_CMD_CONN_CLOSE_SESS_LOGOUT "
 				  "failed sts %04X %04X", __func__,
 				  mbox_sts[0], mbox_sts[1]));
+		if ((mbox_sts[0] == MBOX_STS_COMMAND_ERROR) &&
+		    (mbox_sts[1] == DDB_NOT_LOGGED_IN)) {
+			set_bit(DDB_CONN_CLOSE_FAILURE, &ddb_entry->flags);
+		}
 	}
 
 	return status;
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index a78edc3..3fec116 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -3074,6 +3074,7 @@ qla4xxx_session_create(struct iscsi_endpoint *ep,
 	ddb_entry->sess = cls_sess;
 	ddb_entry->unblock_sess = qla4xxx_unblock_ddb;
 	ddb_entry->ddb_change = qla4xxx_ddb_change;
+	clear_bit(DDB_CONN_CLOSE_FAILURE, &ddb_entry->flags);
 	cls_sess->recovery_tmo = ql4xsess_recovery_tmo;
 	ha->fw_ddb_index_map[ddb_entry->fw_ddb_index] = ddb_entry;
 	ha->tot_ddbs++;
@@ -3123,7 +3124,8 @@ static void qla4xxx_session_destroy(struct iscsi_cls_session *cls_sess)
 
 destroy_session:
 	qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
-
+	if (test_and_clear_bit(DDB_CONN_CLOSE_FAILURE, &ddb_entry->flags))
+		clear_bit(ddb_entry->fw_ddb_index, ha->ddb_idx_map);
 	spin_lock_irqsave(&ha->hardware_lock, flags);
 	qla4xxx_free_ddb(ha, ddb_entry);
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
-- 
1.8.2.GIT


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

* [PATCH 11/24] qla4xxx: Fix failure of IDC Time Extend mailbox command
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (9 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 10/24] qla4xxx: Clear DDB index map upon connection close failure vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 12/24] qla4xxx: Fix processing response queue during probe vikas.chaudhary
                   ` (13 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Issue:
Mailbox command 0x102 (IDC Time Extend) failure seen while applying
changes to iface using iscsiadm

Fix:
Added fix to extend IDC timeout only for ISP84xx when IDC ACK
needs to be posted and disable ACB mailbox command completion
is in intermediate state.

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_mbx.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
index 023f2dd..1d8f485 100644
--- a/drivers/scsi/qla4xxx/ql4_mbx.c
+++ b/drivers/scsi/qla4xxx/ql4_mbx.c
@@ -1922,6 +1922,7 @@ int qla4xxx_disable_acb(struct scsi_qla_host *ha)
 				  mbox_sts[0], mbox_sts[1], mbox_sts[2]));
 	} else {
 		if (is_qla8042(ha) &&
+		    test_bit(DPC_POST_IDC_ACK, &ha->dpc_flags) &&
 		    (mbox_sts[0] != MBOX_STS_COMMAND_COMPLETE)) {
 			/*
 			 * Disable ACB mailbox command takes time to complete
-- 
1.8.2.GIT


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

* [PATCH 12/24] qla4xxx: Fix processing response queue during probe
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (10 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 11/24] qla4xxx: Fix failure of IDC Time Extend mailbox command vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 13/24] qla4xxx: Fix pending IO completion in reset path before initiating chip reset vikas.chaudhary
                   ` (12 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Tej Parkash

From: Tej Parkash <tej.parkash@qlogic.com>

Issue:
While booting with kdump kernel, driver receive IOCB interrupts
for which it is not ready which results in processing them
before init_firmware during driver probe

Fix:
Two steps solution
1. Make driver ready to process the interrupt before interupts
   handlers is registered.
2. Stop driver processing iocb interrupts if not generated as per
   firmware protocol i.e R2H bit set

Signed-off-by: Tej Parkash <tej.parkash@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_isr.c | 15 ++++++++++++---
 drivers/scsi/qla4xxx/ql4_mbx.c |  3 ---
 drivers/scsi/qla4xxx/ql4_nx.c  |  4 ++++
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index 49032f6..df3fd9b 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -1022,7 +1022,8 @@ void qla4_82xx_interrupt_service_routine(struct scsi_qla_host *ha,
     uint32_t intr_status)
 {
 	/* Process response queue interrupt. */
-	if (intr_status & HSRX_RISC_IOCB_INT)
+	if ((intr_status & HSRX_RISC_IOCB_INT) &&
+	    test_bit(AF_INIT_DONE, &ha->flags))
 		qla4xxx_process_response_queue(ha);
 
 	/* Process mailbox/asynch event interrupt.*/
@@ -1399,6 +1400,7 @@ qla4_8xxx_msix_rsp_q(int irq, void *dev_id)
 {
 	struct scsi_qla_host *ha = dev_id;
 	unsigned long flags;
+	int intr_status;
 	uint32_t ival = 0;
 
 	spin_lock_irqsave(&ha->hardware_lock, flags);
@@ -1412,8 +1414,15 @@ qla4_8xxx_msix_rsp_q(int irq, void *dev_id)
 		qla4xxx_process_response_queue(ha);
 		writel(0, &ha->qla4_83xx_reg->iocb_int_mask);
 	} else {
-		qla4xxx_process_response_queue(ha);
-		writel(0, &ha->qla4_82xx_reg->host_int);
+		intr_status = readl(&ha->qla4_82xx_reg->host_status);
+		if (intr_status & HSRX_RISC_IOCB_INT) {
+			qla4xxx_process_response_queue(ha);
+			writel(0, &ha->qla4_82xx_reg->host_int);
+		} else {
+			ql4_printk(KERN_INFO, ha, "%s: spurious iocb interrupt...\n",
+				   __func__);
+			goto exit_msix_rsp_q;
+		}
 	}
 	ha->isr_count++;
 exit_msix_rsp_q:
diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
index 1d8f485..cc27d7f 100644
--- a/drivers/scsi/qla4xxx/ql4_mbx.c
+++ b/drivers/scsi/qla4xxx/ql4_mbx.c
@@ -648,9 +648,6 @@ int qla4xxx_initialize_fw_cb(struct scsi_qla_host * ha)
 		goto exit_init_fw_cb;
 	}
 
-	/* Initialize request and response queues. */
-	qla4xxx_init_rings(ha);
-
 	/* Fill in the request and response queue information. */
 	init_fw_cb->rqq_consumer_idx = cpu_to_le16(ha->request_out);
 	init_fw_cb->compq_producer_idx = cpu_to_le16(ha->response_in);
diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index cbc68f9..bcf3e43 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -3190,6 +3190,10 @@ int qla4_8xxx_load_risc(struct scsi_qla_host *ha)
 
 	retval = qla4_8xxx_device_state_handler(ha);
 
+	/* Initialize request and response queues. */
+	if (retval == QLA_SUCCESS)
+		qla4xxx_init_rings(ha);
+
 	if (retval == QLA_SUCCESS && !test_bit(AF_IRQ_ATTACHED, &ha->flags))
 		retval = qla4xxx_request_irqs(ha);
 
-- 
1.8.2.GIT


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

* [PATCH 13/24] qla4xxx: Fix pending IO completion in reset path before initiating chip reset
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (11 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 12/24] qla4xxx: Fix processing response queue during probe vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 14/24] qla4xxx: Driver not able to collect minidump for ISP84xx vikas.chaudhary
                   ` (11 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Tej Parkash

From: Tej Parkash <tej.parkash@qlogic.com>

Issue:
Pending IO wait does not complete after triggering Graceful reset,
causing ack timeout and call traces.

Fix:
1. Reducing the IO command wait timeout before triggering reset,
   as logically also timeout should be less than reset timeout (10sec).
2. Moving the abort IO after chip reset, because only after
   chip reset, driver owns the IO otherwise it is with firmware and can
   still revert back with response.

Signed-off-by: Tej Parkash <tej.parkash@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_def.h |  2 +-
 drivers/scsi/qla4xxx/ql4_os.c  | 16 ++++++++++++----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
index 33eae2e..c2deaa0 100644
--- a/drivers/scsi/qla4xxx/ql4_def.h
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -194,7 +194,7 @@
 #define ADAPTER_INIT_TOV		30
 #define ADAPTER_RESET_TOV		180
 #define EXTEND_CMD_TOV			60
-#define WAIT_CMD_TOV			30
+#define WAIT_CMD_TOV			5
 #define EH_WAIT_CMD_TOV			120
 #define FIRMWARE_UP_TOV			60
 #define RESET_FIRMWARE_TOV		30
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 3fec116..a27da31 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -4561,11 +4561,19 @@ static int qla4xxx_cmd_wait(struct scsi_qla_host *ha)
 	uint32_t index = 0;
 	unsigned long flags;
 	struct scsi_cmnd *cmd;
+	unsigned long wtime;
+	uint32_t wtmo;
 
-	unsigned long wtime = jiffies + (WAIT_CMD_TOV * HZ);
+	if (is_qla40XX(ha))
+		wtmo = WAIT_CMD_TOV;
+	else
+		wtmo = ha->nx_reset_timeout / 2;
 
-	DEBUG2(ql4_printk(KERN_INFO, ha, "Wait up to %d seconds for cmds to "
-	    "complete\n", WAIT_CMD_TOV));
+	wtime = jiffies + (wtmo * HZ);
+
+	DEBUG2(ql4_printk(KERN_INFO, ha,
+			  "Wait up to %u seconds for cmds to complete\n",
+			  wtmo));
 
 	while (!time_after_eq(jiffies, wtime)) {
 		spin_lock_irqsave(&ha->hardware_lock, flags);
@@ -4868,11 +4876,11 @@ chip_reset:
 			qla4xxx_cmd_wait(ha);
 
 		qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS);
-		qla4xxx_abort_active_cmds(ha, DID_RESET << 16);
 		DEBUG2(ql4_printk(KERN_INFO, ha,
 		    "scsi%ld: %s - Performing chip reset..\n",
 		    ha->host_no, __func__));
 		status = ha->isp_ops->reset_chip(ha);
+		qla4xxx_abort_active_cmds(ha, DID_RESET << 16);
 	}
 
 	/* Flush any pending ddb changed AENs */
-- 
1.8.2.GIT


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

* [PATCH 14/24] qla4xxx: Driver not able to collect minidump for ISP84xx
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (12 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 13/24] qla4xxx: Fix pending IO completion in reset path before initiating chip reset vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 15/24] qla4xxx: Reduce rom-lock contention during reset recovery vikas.chaudhary
                   ` (10 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Tej Parkash

From: Tej Parkash <tej.parkash@qlogic.com>

Issue:
minidump data collection fails as driver reports data mismatch

Fix:
When the driver encounters a new entry type that it cannot process,
it should just skip the entry and adjust the total buffer size by
subtracting the skipped bytes from it. This is to ensure that there
is no data mismatch because of the new entries.

Signed-off-by: Tej Parkash <tej.parkash@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_def.h | 1 +
 drivers/scsi/qla4xxx/ql4_nx.c  | 8 +++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
index c2deaa0..73a5022 100644
--- a/drivers/scsi/qla4xxx/ql4_def.h
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -769,6 +769,7 @@ struct scsi_qla_host {
 	uint32_t fw_dump_capture_mask;
 	void *fw_dump_tmplt_hdr;
 	uint32_t fw_dump_tmplt_size;
+	uint32_t fw_dump_skip_size;
 
 	struct completion mbx_intr_comp;
 
diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index bcf3e43..d2040b4 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -2383,6 +2383,11 @@ static void qla4_8xxx_mark_entry_skipped(struct scsi_qla_host *ha,
 			  "scsi(%ld): Skipping entry[%d]: ETYPE[0x%x]-ELEVEL[0x%x]\n",
 			  ha->host_no, index, entry_hdr->entry_type,
 			  entry_hdr->d_ctrl.entry_capture_mask));
+	/* If driver encounters a new entry type that it cannot process,
+	 * it should just skip the entry and adjust the total buffer size by
+	 * from subtracting the skipped bytes from it
+	 */
+	ha->fw_dump_skip_size += entry_hdr->entry_capture_size;
 }
 
 /* ISP83xx functions to process new minidump entries... */
@@ -2590,6 +2595,7 @@ static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha)
 	uint64_t now;
 	uint32_t timestamp;
 
+	ha->fw_dump_skip_size = 0;
 	if (!ha->fw_dump) {
 		ql4_printk(KERN_INFO, ha, "%s(%ld) No buffer to dump\n",
 			   __func__, ha->host_no);
@@ -2761,7 +2767,7 @@ skip_nxt_entry:
 				 entry_hdr->entry_size);
 	}
 
-	if (data_collected != ha->fw_dump_size) {
+	if ((data_collected + ha->fw_dump_skip_size) != ha->fw_dump_size) {
 		ql4_printk(KERN_INFO, ha,
 			   "Dump data mismatch: Data collected: [0x%x], total_data_size:[0x%x]\n",
 			   data_collected, ha->fw_dump_size);
-- 
1.8.2.GIT


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

* [PATCH 15/24] qla4xxx: Reduce rom-lock contention during reset recovery.
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (13 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 14/24] qla4xxx: Driver not able to collect minidump for ISP84xx vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31 vikas.chaudhary
                   ` (9 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Issue:
Driver holds rom-lock for too long during reset recovery.

During adapter reset testing, it was found that the driver
holds the rom-lock for too long, because of which other
drivers fail to acquire the rom-lock, leading to reset
failures.
The primary cause is, in the bootstrap code, while
holding the rom-lock, the driver checks if the peg is
halted, causing a 2 second contention.

Fix:
When a reset recovery starts, the driver deduces the cause, and
sets appropriate flags in watchdog & recover_adapter routines.
This flag should be used to determine if bootstrap is invoked
from probe or reset context, reducing the rom-lock footprint of
the drivers.

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_nx.c | 33 ++++++++++++---------------------
 1 file changed, 12 insertions(+), 21 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_nx.c b/drivers/scsi/qla4xxx/ql4_nx.c
index d2040b4..63328c8 100644
--- a/drivers/scsi/qla4xxx/ql4_nx.c
+++ b/drivers/scsi/qla4xxx/ql4_nx.c
@@ -2828,37 +2828,28 @@ int qla4_8xxx_device_bootstrap(struct scsi_qla_host *ha)
 	int rval = QLA_ERROR;
 	int i;
 	uint32_t old_count, count;
-	int need_reset = 0, peg_stuck = 1;
+	int need_reset = 0;
 
 	need_reset = ha->isp_ops->need_reset(ha);
-	old_count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER);
-
-	for (i = 0; i < 10; i++) {
-		msleep(200);
-		count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER);
-		if (count != old_count)
-			peg_stuck = 0;
-	}
 
 	if (need_reset) {
 		/* We are trying to perform a recovery here. */
-		if (peg_stuck)
+		if (test_bit(AF_FW_RECOVERY, &ha->flags))
 			ha->isp_ops->rom_lock_recovery(ha);
-		goto dev_initialize;
 	} else  {
-		/* Start of day for this ha context. */
-		if (peg_stuck) {
-			/* Either we are the first or recovery in progress. */
-			ha->isp_ops->rom_lock_recovery(ha);
-			goto dev_initialize;
-		} else {
-			/* Firmware already running. */
-			rval = QLA_SUCCESS;
-			goto dev_ready;
+		old_count = qla4_8xxx_rd_direct(ha, QLA8XXX_PEG_ALIVE_COUNTER);
+		for (i = 0; i < 10; i++) {
+			msleep(200);
+			count = qla4_8xxx_rd_direct(ha,
+						    QLA8XXX_PEG_ALIVE_COUNTER);
+			if (count != old_count) {
+				rval = QLA_SUCCESS;
+				goto dev_ready;
+			}
 		}
+		ha->isp_ops->rom_lock_recovery(ha);
 	}
 
-dev_initialize:
 	/* set to DEV_INITIALIZING */
 	ql4_printk(KERN_INFO, ha, "HW State: INITIALIZING\n");
 	qla4_8xxx_wr_direct(ha, QLA8XXX_CRB_DEV_STATE,
-- 
1.8.2.GIT


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

* [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (14 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 15/24] qla4xxx: Reduce rom-lock contention during reset recovery vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2014-01-17  8:30   ` Mike Christie
  2013-12-16 11:49 ` [PATCH 17/24] qla4xxx: Remove unused code from qla4xxx_set_ifcb() vikas.chaudhary
                   ` (8 subsequent siblings)
  24 siblings, 1 reply; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Issue:
While unloading driver MBOX 0x31 fail as DDB logout (MBOX 0x56)
operation is not completed.

Fix:
Wait for DDB Logout completion before MBOX 0x31

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_os.c | 54 ++++++++++++++++++++++++++++++++++++-------
 1 file changed, 46 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index a27da31..ce20c75 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -8886,10 +8886,54 @@ static void qla4xxx_prevent_other_port_reinit(struct scsi_qla_host *ha)
 	}
 }
 
+static void qla4xxx_destroy_ddb(struct scsi_qla_host *ha,
+		struct ddb_entry *ddb_entry)
+{
+	struct dev_db_entry *fw_ddb_entry = NULL;
+	dma_addr_t fw_ddb_entry_dma;
+	unsigned long wtime;
+	uint32_t ddb_state;
+	int options;
+	int status;
+
+	options = LOGOUT_OPTION_CLOSE_SESSION;
+	if (qla4xxx_session_logout_ddb(ha, ddb_entry, options) == QLA_ERROR) {
+		ql4_printk(KERN_ERR, ha, "%s: Logout failed\n", __func__);
+		goto clear_ddb;
+	}
+
+	fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry),
+					  &fw_ddb_entry_dma, GFP_KERNEL);
+	if (!fw_ddb_entry) {
+		ql4_printk(KERN_ERR, ha,
+			   "%s: Unable to allocate dma buffer\n", __func__);
+		goto clear_ddb;
+	}
+
+	wtime = jiffies + (HZ * LOGOUT_TOV);
+	do {
+		status = qla4xxx_get_fwddb_entry(ha, ddb_entry->fw_ddb_index,
+						 fw_ddb_entry, fw_ddb_entry_dma,
+						 NULL, NULL, &ddb_state, NULL,
+						 NULL, NULL);
+		if (status == QLA_ERROR)
+			goto clear_ddb;
+
+		if ((ddb_state == DDB_DS_NO_CONNECTION_ACTIVE) ||
+		    (ddb_state == DDB_DS_SESSION_FAILED))
+			goto clear_ddb;
+
+		schedule_timeout_uninterruptible(HZ);
+	} while ((time_after(wtime, jiffies)));
+
+clear_ddb:
+	qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
+	return;
+}
+
 static void qla4xxx_destroy_fw_ddb_session(struct scsi_qla_host *ha)
 {
 	struct ddb_entry *ddb_entry;
-	int options;
 	int idx;
 
 	for (idx = 0; idx < MAX_DDB_ENTRIES; idx++) {
@@ -8898,13 +8942,7 @@ static void qla4xxx_destroy_fw_ddb_session(struct scsi_qla_host *ha)
 		if ((ddb_entry != NULL) &&
 		    (ddb_entry->ddb_type == FLASH_DDB)) {
 
-			options = LOGOUT_OPTION_CLOSE_SESSION;
-			if (qla4xxx_session_logout_ddb(ha, ddb_entry, options)
-			    == QLA_ERROR)
-				ql4_printk(KERN_ERR, ha, "%s: Logout failed\n",
-					   __func__);
-
-			qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
+			qla4xxx_destroy_ddb(ha, ddb_entry);
 			/*
 			 * we have decremented the reference count of the driver
 			 * when we setup the session to have the driver unload
-- 
1.8.2.GIT


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

* [PATCH 17/24] qla4xxx: Remove unused code from qla4xxx_set_ifcb()
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (15 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31 vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 18/24] qla4xxx: Updated print for device login, logout path vikas.chaudhary
                   ` (7 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Removing unused code as FW does not need any value in mbox-5.

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_mbx.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
index cc27d7f..782a94586 100644
--- a/drivers/scsi/qla4xxx/ql4_mbx.c
+++ b/drivers/scsi/qla4xxx/ql4_mbx.c
@@ -383,7 +383,6 @@ qla4xxx_set_ifcb(struct scsi_qla_host *ha, uint32_t *mbox_cmd,
 	mbox_cmd[2] = LSDW(init_fw_cb_dma);
 	mbox_cmd[3] = MSDW(init_fw_cb_dma);
 	mbox_cmd[4] = sizeof(struct addr_ctrl_blk);
-	mbox_cmd[5] = (IFCB_VER_MAX << 8) | IFCB_VER_MIN;
 
 	if (qla4xxx_mailbox_command(ha, 6, 6, mbox_cmd, mbox_sts) !=
 	    QLA_SUCCESS) {
-- 
1.8.2.GIT


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

* [PATCH 18/24] qla4xxx: Updated print for device login, logout path
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (16 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 17/24] qla4xxx: Remove unused code from qla4xxx_set_ifcb() vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 19/24] qla4xxx: Update print statements in qla4xxx_mailbox_command() vikas.chaudhary
                   ` (6 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_os.c | 59 +++++++++++++++++++++++++++++++------------
 1 file changed, 43 insertions(+), 16 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index ce20c75..d0a8695 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -1670,16 +1670,13 @@ qla4xxx_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
 	struct sockaddr_in *addr;
 	struct sockaddr_in6 *addr6;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	if (!shost) {
 		ret = -ENXIO;
-		printk(KERN_ERR "%s: shost is NULL\n",
-		       __func__);
+		pr_err("%s: shost is NULL\n", __func__);
 		return ERR_PTR(ret);
 	}
 
 	ha = iscsi_host_priv(shost);
-
 	ep = iscsi_create_endpoint(sizeof(struct qla_endpoint));
 	if (!ep) {
 		ret = -ENOMEM;
@@ -1699,6 +1696,9 @@ qla4xxx_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
 		addr6 = (struct sockaddr_in6 *)&qla_ep->dst_addr;
 		DEBUG2(ql4_printk(KERN_INFO, ha, "%s: %pI6\n", __func__,
 				  (char *)&addr6->sin6_addr));
+	} else {
+		ql4_printk(KERN_WARNING, ha, "%s: Invalid endpoint\n",
+			   __func__);
 	}
 
 	qla_ep->host = shost;
@@ -1712,9 +1712,9 @@ static int qla4xxx_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
 	struct scsi_qla_host *ha;
 	int ret = 0;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	qla_ep = ep->dd_data;
 	ha = to_qla_host(qla_ep->host);
+	DEBUG2(pr_info_ratelimited("%s: host: %ld\n", __func__, ha->host_no));
 
 	if (adapter_up(ha) && !test_bit(AF_BUILD_DDB_LIST, &ha->flags))
 		ret = 1;
@@ -1724,7 +1724,13 @@ static int qla4xxx_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
 
 static void qla4xxx_ep_disconnect(struct iscsi_endpoint *ep)
 {
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
+	struct qla_endpoint *qla_ep;
+	struct scsi_qla_host *ha;
+
+	qla_ep = ep->dd_data;
+	ha = to_qla_host(qla_ep->host);
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: host: %ld\n", __func__,
+			  ha->host_no));
 	iscsi_destroy_endpoint(ep);
 }
 
@@ -1734,8 +1740,11 @@ static int qla4xxx_get_ep_param(struct iscsi_endpoint *ep,
 {
 	struct qla_endpoint *qla_ep = ep->dd_data;
 	struct sockaddr *dst_addr;
+	struct scsi_qla_host *ha;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
+	ha = to_qla_host(qla_ep->host);
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: host: %ld\n", __func__,
+			  ha->host_no));
 
 	switch (param) {
 	case ISCSI_PARAM_CONN_PORT:
@@ -1766,13 +1775,13 @@ static void qla4xxx_conn_get_stats(struct iscsi_cls_conn *cls_conn,
 	int ret;
 	dma_addr_t iscsi_stats_dma;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
-
 	cls_sess = iscsi_conn_to_session(cls_conn);
 	sess = cls_sess->dd_data;
 	ddb_entry = sess->dd_data;
 	ha = ddb_entry->ha;
 
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: host: %ld\n", __func__,
+			  ha->host_no));
 	stats_size = PAGE_ALIGN(sizeof(struct ql_iscsi_stats));
 	/* Allocate memory */
 	ql_iscsi_stats = dma_alloc_coherent(&ha->pdev->dev, stats_size,
@@ -3045,7 +3054,6 @@ qla4xxx_session_create(struct iscsi_endpoint *ep,
 	struct sockaddr *dst_addr;
 	int ret;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	if (!ep) {
 		printk(KERN_ERR "qla4xxx: missing ep.\n");
 		return NULL;
@@ -3054,6 +3062,8 @@ qla4xxx_session_create(struct iscsi_endpoint *ep,
 	qla_ep = ep->dd_data;
 	dst_addr = (struct sockaddr *)&qla_ep->dst_addr;
 	ha = to_qla_host(qla_ep->host);
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: host: %ld\n", __func__,
+			  ha->host_no));
 
 	ret = qla4xxx_get_ddb_index(ha, &ddb_index);
 	if (ret == QLA_ERROR)
@@ -3093,10 +3103,11 @@ static void qla4xxx_session_destroy(struct iscsi_cls_session *cls_sess)
 	uint32_t ddb_state;
 	int ret;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	sess = cls_sess->dd_data;
 	ddb_entry = sess->dd_data;
 	ha = ddb_entry->ha;
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: host: %ld\n", __func__,
+			  ha->host_no));
 
 	fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry),
 					  &fw_ddb_entry_dma, GFP_KERNEL);
@@ -3143,17 +3154,23 @@ qla4xxx_conn_create(struct iscsi_cls_session *cls_sess, uint32_t conn_idx)
 	struct iscsi_cls_conn *cls_conn;
 	struct iscsi_session *sess;
 	struct ddb_entry *ddb_entry;
+	struct scsi_qla_host *ha;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	cls_conn = iscsi_conn_setup(cls_sess, sizeof(struct qla_conn),
 				    conn_idx);
-	if (!cls_conn)
+	if (!cls_conn) {
+		pr_info("%s: Can not create connection for conn_idx = %u\n",
+			__func__, conn_idx);
 		return NULL;
+	}
 
 	sess = cls_sess->dd_data;
 	ddb_entry = sess->dd_data;
 	ddb_entry->conn = cls_conn;
 
+	ha = ddb_entry->ha;
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: conn_idx = %u\n", __func__,
+			  conn_idx));
 	return cls_conn;
 }
 
@@ -3164,8 +3181,16 @@ static int qla4xxx_conn_bind(struct iscsi_cls_session *cls_session,
 	struct iscsi_conn *conn;
 	struct qla_conn *qla_conn;
 	struct iscsi_endpoint *ep;
+	struct ddb_entry *ddb_entry;
+	struct scsi_qla_host *ha;
+	struct iscsi_session *sess;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
+	sess = cls_session->dd_data;
+	ddb_entry = sess->dd_data;
+	ha = ddb_entry->ha;
+
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: sid = %d, cid = %d\n", __func__,
+			  cls_session->sid, cls_conn->cid));
 
 	if (iscsi_conn_bind(cls_session, cls_conn, is_leading))
 		return -EINVAL;
@@ -3188,10 +3213,11 @@ static int qla4xxx_conn_start(struct iscsi_cls_conn *cls_conn)
 	int ret = 0;
 	int status = QLA_SUCCESS;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	sess = cls_sess->dd_data;
 	ddb_entry = sess->dd_data;
 	ha = ddb_entry->ha;
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: sid = %d, cid = %d\n", __func__,
+			  cls_sess->sid, cls_conn->cid));
 
 	/* Check if we have  matching FW DDB, if yes then do not
 	 * login to this target. This could cause target to logout previous
@@ -3265,10 +3291,11 @@ static void qla4xxx_conn_destroy(struct iscsi_cls_conn *cls_conn)
 	struct ddb_entry *ddb_entry;
 	int options;
 
-	DEBUG2(printk(KERN_INFO "Func: %s\n", __func__));
 	sess = cls_sess->dd_data;
 	ddb_entry = sess->dd_data;
 	ha = ddb_entry->ha;
+	DEBUG2(ql4_printk(KERN_INFO, ha, "%s: cid = %d\n", __func__,
+			  cls_conn->cid));
 
 	options = LOGOUT_OPTION_CLOSE_SESSION;
 	if (qla4xxx_session_logout_ddb(ha, ddb_entry, options) == QLA_ERROR)
-- 
1.8.2.GIT


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

* [PATCH 19/24] qla4xxx: Update print statements in qla4xxx_mailbox_command()
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (17 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 18/24] qla4xxx: Updated print for device login, logout path vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 20/24] qla4xxx: Update print statements in func qla4xxx_eh_abort() vikas.chaudhary
                   ` (5 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_mbx.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_mbx.c b/drivers/scsi/qla4xxx/ql4_mbx.c
index 782a94586..1345c0e 100644
--- a/drivers/scsi/qla4xxx/ql4_mbx.c
+++ b/drivers/scsi/qla4xxx/ql4_mbx.c
@@ -212,9 +212,8 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount,
 			    ha->host_no, __func__));
 			goto mbox_exit;
 		}
-		DEBUG2(printk("scsi%ld: Mailbox Cmd 0x%08X timed out ...,"
-			      " Scheduling Adapter Reset\n", ha->host_no,
-			      mbx_cmd[0]));
+		ql4_printk(KERN_WARNING, ha, "scsi%ld: Mailbox Cmd 0x%08X timed out, Scheduling Adapter Reset\n",
+			   ha->host_no, mbx_cmd[0]);
 		ha->mailbox_timeout_count++;
 		mbx_sts[0] = (-1);
 		set_bit(DPC_RESET_HA, &ha->dpc_flags);
@@ -251,15 +250,16 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount,
 		break;
 
 	case MBOX_STS_BUSY:
-		DEBUG2( printk("scsi%ld: %s: Cmd = %08X, ISP BUSY\n",
-			       ha->host_no, __func__, mbx_cmd[0]));
+		ql4_printk(KERN_WARNING, ha, "scsi%ld: %s: Cmd = %08X, ISP BUSY\n",
+			   ha->host_no, __func__, mbx_cmd[0]);
 		ha->mailbox_timeout_count++;
 		break;
 
 	default:
-		DEBUG2(printk("scsi%ld: %s: **** FAILED, cmd = %08X, "
-			      "sts = %08X ****\n", ha->host_no, __func__,
-			      mbx_cmd[0], mbx_sts[0]));
+		ql4_printk(KERN_WARNING, ha, "scsi%ld: %s: FAILED, MBOX CMD = %08X, MBOX STS = %08X %08X %08X %08X %08X %08X %08X %08X\n",
+			   ha->host_no, __func__, mbx_cmd[0], mbx_sts[0],
+			   mbx_sts[1], mbx_sts[2], mbx_sts[3], mbx_sts[4],
+			   mbx_sts[5], mbx_sts[6], mbx_sts[7]);
 		break;
 	}
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
-- 
1.8.2.GIT


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

* [PATCH 20/24] qla4xxx: Update print statements in func qla4xxx_eh_abort()
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (18 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 19/24] qla4xxx: Update print statements in qla4xxx_mailbox_command() vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 21/24] qla4xxx: Update print statements in func qla4xxx_do_dpc() vikas.chaudhary
                   ` (4 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_os.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index d0a8695..410fe02 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -9230,14 +9230,15 @@ static int qla4xxx_eh_abort(struct scsi_cmnd *cmd)
 	int ret = SUCCESS;
 	int wait = 0;
 
-	ql4_printk(KERN_INFO, ha,
-	    "scsi%ld:%d:%d: Abort command issued cmd=%p\n",
-	    ha->host_no, id, lun, cmd);
+	ql4_printk(KERN_INFO, ha, "scsi%ld:%d:%d: Abort command issued cmd=%p, cdb=0x%x\n",
+		   ha->host_no, id, lun, cmd, cmd->cmnd[0]);
 
 	spin_lock_irqsave(&ha->hardware_lock, flags);
 	srb = (struct srb *) CMD_SP(cmd);
 	if (!srb) {
 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
+		ql4_printk(KERN_INFO, ha, "scsi%ld:%d:%d: Specified command has already completed.\n",
+			   ha->host_no, id, lun);
 		return SUCCESS;
 	}
 	kref_get(&srb->srb_ref);
-- 
1.8.2.GIT


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

* [PATCH 21/24] qla4xxx: Update print statements in func qla4xxx_do_dpc()
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (19 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 20/24] qla4xxx: Update print statements in func qla4xxx_eh_abort() vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 22/24] qla4xxx: Handle IPv6 AEN notifications vikas.chaudhary
                   ` (3 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_os.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 410fe02..e8a8a7d 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -5283,9 +5283,9 @@ static void qla4xxx_do_dpc(struct work_struct *work)
 		container_of(work, struct scsi_qla_host, dpc_work);
 	int status = QLA_ERROR;
 
-	DEBUG2(printk("scsi%ld: %s: DPC handler waking up."
-	    "flags = 0x%08lx, dpc_flags = 0x%08lx\n",
-	    ha->host_no, __func__, ha->flags, ha->dpc_flags))
+	DEBUG2(ql4_printk(KERN_INFO, ha,
+			  "scsi%ld: %s: DPC handler waking up. flags = 0x%08lx, dpc_flags = 0x%08lx\n",
+			  ha->host_no, __func__, ha->flags, ha->dpc_flags));
 
 	/* Initialization not yet finished. Don't do anything yet. */
 	if (!test_bit(AF_INIT_DONE, &ha->flags))
-- 
1.8.2.GIT


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

* [PATCH 22/24] qla4xxx: Handle IPv6 AEN notifications
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (20 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 21/24] qla4xxx: Update print statements in func qla4xxx_do_dpc() vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 23/24] qla4xxx: Fix sparse warnings vikas.chaudhary
                   ` (2 subsequent siblings)
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc
  Cc: linux-scsi, vikas.chaudhary, lalit.chandivade, Nilesh Javali

From: Nilesh Javali <nilesh.javali@qlogic.com>

Signed-off-by: Nilesh Javali <nilesh.javali@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_fw.h  |  6 +++---
 drivers/scsi/qla4xxx/ql4_isr.c | 30 ++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_fw.h b/drivers/scsi/qla4xxx/ql4_fw.h
index a94593a..209853c 100644
--- a/drivers/scsi/qla4xxx/ql4_fw.h
+++ b/drivers/scsi/qla4xxx/ql4_fw.h
@@ -506,9 +506,9 @@ struct qla_flt_region {
 #define MBOX_ASTS_RESPONSE_QUEUE_FULL		0x8028
 #define MBOX_ASTS_IP_ADDR_STATE_CHANGED		0x8029
 #define MBOX_ASTS_IPV6_DEFAULT_ROUTER_CHANGED	0x802A
-#define MBOX_ASTS_IPV6_PREFIX_EXPIRED		0x802B
-#define MBOX_ASTS_IPV6_ND_PREFIX_IGNORED	0x802C
-#define MBOX_ASTS_IPV6_LCL_PREFIX_IGNORED	0x802D
+#define MBOX_ASTS_IPV6_LINK_MTU_CHANGE		0x802B
+#define MBOX_ASTS_IPV6_AUTO_PREFIX_IGNORED	0x802C
+#define MBOX_ASTS_IPV6_ND_LOCAL_PREFIX_IGNORED	0x802D
 #define MBOX_ASTS_ICMPV6_ERROR_MSG_RCVD		0x802E
 #define MBOX_ASTS_INITIALIZATION_FAILED		0x8031
 #define MBOX_ASTS_SYSTEM_WARNING_EVENT		0x8036
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index df3fd9b..bb34ef8 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -635,6 +635,18 @@ static void qla4xxx_update_ipaddr_state(struct scsi_qla_host *ha,
 	}
 }
 
+static void qla4xxx_default_router_changed(struct scsi_qla_host *ha,
+					   uint32_t *mbox_sts)
+{
+	memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[0],
+	       &mbox_sts[2], sizeof(uint32_t));
+	memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[1],
+	       &mbox_sts[3], sizeof(uint32_t));
+	memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[2],
+	       &mbox_sts[4], sizeof(uint32_t));
+	memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[3],
+	       &mbox_sts[5], sizeof(uint32_t));
+}
 
 /**
  * qla4xxx_isr_decode_mailbox - decodes mailbox status
@@ -802,6 +814,23 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
 			}
 			break;
 
+		case MBOX_ASTS_IPV6_LINK_MTU_CHANGE:
+		case MBOX_ASTS_IPV6_AUTO_PREFIX_IGNORED:
+		case MBOX_ASTS_IPV6_ND_LOCAL_PREFIX_IGNORED:
+			/* No action */
+			DEBUG2(ql4_printk(KERN_INFO, ha, "scsi%ld: AEN %04x\n",
+					  ha->host_no, mbox_status));
+			break;
+
+		case MBOX_ASTS_ICMPV6_ERROR_MSG_RCVD:
+			DEBUG2(ql4_printk(KERN_INFO, ha,
+					  "scsi%ld: AEN %04x, IPv6 ERROR, "
+					  "mbox_sts[1]=%08x, mbox_sts[2]=%08x, mbox_sts[3}=%08x, mbox_sts[4]=%08x mbox_sts[5]=%08x\n",
+					  ha->host_no, mbox_sts[0], mbox_sts[1],
+					  mbox_sts[2], mbox_sts[3], mbox_sts[4],
+					  mbox_sts[5]));
+			break;
+
 		case MBOX_ASTS_MAC_ADDRESS_CHANGED:
 		case MBOX_ASTS_DNS:
 			/* No action */
@@ -939,6 +968,7 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
 			DEBUG2(ql4_printk(KERN_INFO, ha,
 					  "scsi%ld: AEN %04x Received IPv6 default router changed notification\n",
 					  ha->host_no, mbox_sts[0]));
+			qla4xxx_default_router_changed(ha, mbox_sts);
 			break;
 
 		case MBOX_ASTS_IDC_TIME_EXTEND_NOTIFICATION:
-- 
1.8.2.GIT


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

* [PATCH 23/24] qla4xxx: Fix sparse warnings
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (21 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 22/24] qla4xxx: Handle IPv6 AEN notifications vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2013-12-16 11:49 ` [PATCH 24/24] qla4xxx: Update driver version to 5.04.00-k4 vikas.chaudhary
  2014-01-17 18:20 ` [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch Mike Christie
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Fix following sparse warnings:-
 drivers/scsi/qla4xxx/ql4_os.c:2109:33: warning: cast truncates bits from constant value (ffff7fff becomes 7fff)
 drivers/scsi/qla4xxx/ql4_os.c:2306:33: warning: cast truncates bits from constant value (ffff7fff becomes 7fff)

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_os.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index e8a8a7d..3c2240c 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -2109,7 +2109,8 @@ static void qla4xxx_set_ipv6(struct scsi_qla_host *ha,
 				cpu_to_le16(IPV6_TCPOPT_DELAYED_ACK_DISABLE);
 		else
 			init_fw_cb->ipv6_tcp_opts &=
-				cpu_to_le16(~IPV6_TCPOPT_DELAYED_ACK_DISABLE);
+				cpu_to_le16(~IPV6_TCPOPT_DELAYED_ACK_DISABLE &
+					    0xFFFF);
 		break;
 	case ISCSI_NET_PARAM_TCP_NAGLE_DISABLE:
 		if (iface_param->iface_num & 0x1)
@@ -2306,7 +2307,8 @@ static void qla4xxx_set_ipv4(struct scsi_qla_host *ha,
 				cpu_to_le16(TCPOPT_DELAYED_ACK_DISABLE);
 		else
 			init_fw_cb->ipv4_tcp_opts &=
-				cpu_to_le16(~TCPOPT_DELAYED_ACK_DISABLE);
+				cpu_to_le16(~TCPOPT_DELAYED_ACK_DISABLE &
+					    0xFFFF);
 		break;
 	case ISCSI_NET_PARAM_TCP_NAGLE_DISABLE:
 		if (iface_param->iface_num & 0x1)
-- 
1.8.2.GIT


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

* [PATCH 24/24] qla4xxx: Update driver version to 5.04.00-k4
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (22 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 23/24] qla4xxx: Fix sparse warnings vikas.chaudhary
@ 2013-12-16 11:49 ` vikas.chaudhary
  2014-01-17 18:20 ` [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch Mike Christie
  24 siblings, 0 replies; 28+ messages in thread
From: vikas.chaudhary @ 2013-12-16 11:49 UTC (permalink / raw)
  To: jbottomley, michaelc; +Cc: linux-scsi, vikas.chaudhary, lalit.chandivade

From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
---
 drivers/scsi/qla4xxx/ql4_version.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/qla4xxx/ql4_version.h b/drivers/scsi/qla4xxx/ql4_version.h
index 9b29466..c6ba0a6 100644
--- a/drivers/scsi/qla4xxx/ql4_version.h
+++ b/drivers/scsi/qla4xxx/ql4_version.h
@@ -5,4 +5,4 @@
  * See LICENSE.qla4xxx for copyright and licensing details.
  */
 
-#define QLA4XXX_DRIVER_VERSION	"5.04.00-k3"
+#define QLA4XXX_DRIVER_VERSION	"5.04.00-k4"
-- 
1.8.2.GIT


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

* Re: [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31
  2013-12-16 11:49 ` [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31 vikas.chaudhary
@ 2014-01-17  8:30   ` Mike Christie
  2014-01-17 10:34     ` Vikas Chaudhary
  0 siblings, 1 reply; 28+ messages in thread
From: Mike Christie @ 2014-01-17  8:30 UTC (permalink / raw)
  To: vikas.chaudhary; +Cc: jbottomley, linux-scsi, lalit.chandivade


> +static void qla4xxx_destroy_ddb(struct scsi_qla_host *ha,
> +		struct ddb_entry *ddb_entry)
> +{
> +	struct dev_db_entry *fw_ddb_entry = NULL;
> +	dma_addr_t fw_ddb_entry_dma;
> +	unsigned long wtime;
> +	uint32_t ddb_state;
> +	int options;
> +	int status;
> +
> +	options = LOGOUT_OPTION_CLOSE_SESSION;
> +	if (qla4xxx_session_logout_ddb(ha, ddb_entry, options) == QLA_ERROR) {
> +		ql4_printk(KERN_ERR, ha, "%s: Logout failed\n", __func__);
> +		goto clear_ddb;
> +	}
> +
> +	fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev, sizeof(*fw_ddb_entry),
> +					  &fw_ddb_entry_dma, GFP_KERNEL);
> +	if (!fw_ddb_entry) {
> +		ql4_printk(KERN_ERR, ha,
> +			   "%s: Unable to allocate dma buffer\n", __func__);
> +		goto clear_ddb;
> +	}
> +
> +	wtime = jiffies + (HZ * LOGOUT_TOV);
> +	do {
> +		status = qla4xxx_get_fwddb_entry(ha, ddb_entry->fw_ddb_index,
> +						 fw_ddb_entry, fw_ddb_entry_dma,
> +						 NULL, NULL, &ddb_state, NULL,
> +						 NULL, NULL);
> +		if (status == QLA_ERROR)
> +			goto clear_ddb;
> +
> +		if ((ddb_state == DDB_DS_NO_CONNECTION_ACTIVE) ||
> +		    (ddb_state == DDB_DS_SESSION_FAILED))
> +			goto clear_ddb;
> +
> +		schedule_timeout_uninterruptible(HZ);
> +	} while ((time_after(wtime, jiffies)));


I think there is a missing dma_free_coherent

> +
> +clear_ddb:
> +	qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
> +	return;
> +}
> +

Don't need return statement there.


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

* Re: [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31
  2014-01-17  8:30   ` Mike Christie
@ 2014-01-17 10:34     ` Vikas Chaudhary
  0 siblings, 0 replies; 28+ messages in thread
From: Vikas Chaudhary @ 2014-01-17 10:34 UTC (permalink / raw)
  To: Mike Christie; +Cc: jbottomley@parallels.com, linux-scsi, Lalit Chandivade

[-- Attachment #1: Type: text/plain, Size: 1735 bytes --]



On 17/01/14 2:00 PM, "Mike Christie" <michaelc@cs.wisc.edu> wrote:

>
>> +static void qla4xxx_destroy_ddb(struct scsi_qla_host *ha,
>> +		struct ddb_entry *ddb_entry)
>> +{
>> +	struct dev_db_entry *fw_ddb_entry = NULL;
>> +	dma_addr_t fw_ddb_entry_dma;
>> +	unsigned long wtime;
>> +	uint32_t ddb_state;
>> +	int options;
>> +	int status;
>> +
>> +	options = LOGOUT_OPTION_CLOSE_SESSION;
>> +	if (qla4xxx_session_logout_ddb(ha, ddb_entry, options) == QLA_ERROR) {
>> +		ql4_printk(KERN_ERR, ha, "%s: Logout failed\n", __func__);
>> +		goto clear_ddb;
>> +	}
>> +
>> +	fw_ddb_entry = dma_alloc_coherent(&ha->pdev->dev,
>>sizeof(*fw_ddb_entry),
>> +					  &fw_ddb_entry_dma, GFP_KERNEL);
>> +	if (!fw_ddb_entry) {
>> +		ql4_printk(KERN_ERR, ha,
>> +			   "%s: Unable to allocate dma buffer\n", __func__);
>> +		goto clear_ddb;
>> +	}
>> +
>> +	wtime = jiffies + (HZ * LOGOUT_TOV);
>> +	do {
>> +		status = qla4xxx_get_fwddb_entry(ha, ddb_entry->fw_ddb_index,
>> +						 fw_ddb_entry, fw_ddb_entry_dma,
>> +						 NULL, NULL, &ddb_state, NULL,
>> +						 NULL, NULL);
>> +		if (status == QLA_ERROR)
>> +			goto clear_ddb;
>> +
>> +		if ((ddb_state == DDB_DS_NO_CONNECTION_ACTIVE) ||
>> +		    (ddb_state == DDB_DS_SESSION_FAILED))
>> +			goto clear_ddb;
>> +
>> +		schedule_timeout_uninterruptible(HZ);
>> +	} while ((time_after(wtime, jiffies)));
>
>
>I think there is a missing dma_free_coherent
>
>> +
>> +clear_ddb:
>> +	qla4xxx_clear_ddb_entry(ha, ddb_entry->fw_ddb_index);
>> +	return;
>> +}
>> +
>
>Don't need return statement there.


Thanks a lot for review.
Updated patch is posted here:-
http://marc.info/?l=linux-scsi&m=138995390232212&w=2

Thanks,
Vikas.


[-- Attachment #2: winmail.dat --]
[-- Type: application/ms-tnef, Size: 4740 bytes --]

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

* Re: [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch
  2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
                   ` (23 preceding siblings ...)
  2013-12-16 11:49 ` [PATCH 24/24] qla4xxx: Update driver version to 5.04.00-k4 vikas.chaudhary
@ 2014-01-17 18:20 ` Mike Christie
  24 siblings, 0 replies; 28+ messages in thread
From: Mike Christie @ 2014-01-17 18:20 UTC (permalink / raw)
  To: vikas.chaudhary; +Cc: jbottomley, linux-scsi, lalit.chandivade

On 12/16/2013 05:49 AM, vikas.chaudhary@qlogic.com wrote:
> From: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
> 
> James,
> 
> Please apply the following patches to the scsi tree at your earliest convenience.
> These patches are on top of other qla4xxx patch posted on list here:
> http://marc.info/?l=linux-scsi&m=138511809612830&w=2
> 
> Nilesh Javali (5):
>       qla4xxx: ISP8xxx: Correct retry of adapter initialization
>       qla4xxx: Improve loopback failure messages
>       qla4xxx: Rename ACB_STATE macros with IP_ADDRSTATE macros
>       qla4xxx: Clear DDB index map upon connection close failure
>       qla4xxx: Handle IPv6 AEN notifications
> 
> Tej Parkash (4):
>       qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx
>       qla4xxx: Fix processing response queue during probe
>       qla4xxx: Fix pending IO completion in reset path before initiating chip reset
>       qla4xxx: Driver not able to collect minidump for ISP84xx
> 
> Vikas Chaudhary (15):
>       qla4xxx: Print WARN_ONCE() if iSCSI function presence bit removed
>       qla4xxx: Fix comments in code
>       qla4xxx: Use IDC_CTRL bit1 directly instead of AF_83XX_NO_FWDUMP flag.
>       qla4xxx: Correctly handle msleep_interruptible
>       qla4xxx: Return correct error status from func qla4xxx_request_irqs()
>       qla4xxx: Fix failure of IDC Time Extend mailbox command
>       qla4xxx: Reduce rom-lock contention during reset recovery.
>       qla4xxx: Fix failure of mbox 0x31
>       qla4xxx: Remove unused code from qla4xxx_set_ifcb()
>       qla4xxx: Updated print for device login, logout path
>       qla4xxx: Update print statements in qla4xxx_mailbox_command()
>       qla4xxx: Update print statements in func qla4xxx_eh_abort()
>       qla4xxx: Update print statements in func qla4xxx_do_dpc()
>       qla4xxx: Fix sparse warnings
>       qla4xxx: Update driver version to 5.04.00-k4
> 
> Thanks,
> Vikas.
> 

Patchset looks ok with fixed up [PATCH 16/24] patch here

"[PATCH V1 16/24] qla4xxx: Fix failure of mbox 0x31"
http://marc.info/?l=linux-scsi&m=138995390232212&w=2


Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>

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

end of thread, other threads:[~2014-01-17 18:21 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-16 11:49 [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch vikas.chaudhary
2013-12-16 11:49 ` [PATCH 01/24] qla4xxx: ISP8xxx: Correct retry of adapter initialization vikas.chaudhary
2013-12-16 11:49 ` [PATCH 02/24] qla4xxx: Print WARN_ONCE() if iSCSI function presence bit removed vikas.chaudhary
2013-12-16 11:49 ` [PATCH 03/24] qla4xxx: Fix comments in code vikas.chaudhary
2013-12-16 11:49 ` [PATCH 04/24] qla4xxx: Use IDC_CTRL bit1 directly instead of AF_83XX_NO_FWDUMP flag vikas.chaudhary
2013-12-16 11:49 ` [PATCH 05/24] qla4xxx: Improve loopback failure messages vikas.chaudhary
2013-12-16 11:49 ` [PATCH 06/24] qla4xxx: Rename ACB_STATE macros with IP_ADDRSTATE macros vikas.chaudhary
2013-12-16 11:49 ` [PATCH 07/24] qla4xxx: Correctly handle msleep_interruptible vikas.chaudhary
2013-12-16 11:49 ` [PATCH 08/24] qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx vikas.chaudhary
2013-12-16 11:49 ` [PATCH 09/24] qla4xxx: Return correct error status from func qla4xxx_request_irqs() vikas.chaudhary
2013-12-16 11:49 ` [PATCH 10/24] qla4xxx: Clear DDB index map upon connection close failure vikas.chaudhary
2013-12-16 11:49 ` [PATCH 11/24] qla4xxx: Fix failure of IDC Time Extend mailbox command vikas.chaudhary
2013-12-16 11:49 ` [PATCH 12/24] qla4xxx: Fix processing response queue during probe vikas.chaudhary
2013-12-16 11:49 ` [PATCH 13/24] qla4xxx: Fix pending IO completion in reset path before initiating chip reset vikas.chaudhary
2013-12-16 11:49 ` [PATCH 14/24] qla4xxx: Driver not able to collect minidump for ISP84xx vikas.chaudhary
2013-12-16 11:49 ` [PATCH 15/24] qla4xxx: Reduce rom-lock contention during reset recovery vikas.chaudhary
2013-12-16 11:49 ` [PATCH 16/24] qla4xxx: Fix failure of mbox 0x31 vikas.chaudhary
2014-01-17  8:30   ` Mike Christie
2014-01-17 10:34     ` Vikas Chaudhary
2013-12-16 11:49 ` [PATCH 17/24] qla4xxx: Remove unused code from qla4xxx_set_ifcb() vikas.chaudhary
2013-12-16 11:49 ` [PATCH 18/24] qla4xxx: Updated print for device login, logout path vikas.chaudhary
2013-12-16 11:49 ` [PATCH 19/24] qla4xxx: Update print statements in qla4xxx_mailbox_command() vikas.chaudhary
2013-12-16 11:49 ` [PATCH 20/24] qla4xxx: Update print statements in func qla4xxx_eh_abort() vikas.chaudhary
2013-12-16 11:49 ` [PATCH 21/24] qla4xxx: Update print statements in func qla4xxx_do_dpc() vikas.chaudhary
2013-12-16 11:49 ` [PATCH 22/24] qla4xxx: Handle IPv6 AEN notifications vikas.chaudhary
2013-12-16 11:49 ` [PATCH 23/24] qla4xxx: Fix sparse warnings vikas.chaudhary
2013-12-16 11:49 ` [PATCH 24/24] qla4xxx: Update driver version to 5.04.00-k4 vikas.chaudhary
2014-01-17 18:20 ` [PATCH 0/24] qla4xxx: 5.04.00-k4: Updates for scsi "misc" branch Mike Christie

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).