* [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* 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
* [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 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