Commit 99b53bf5 authored by Prasanna Mumbai's avatar Prasanna Mumbai Committed by James Bottomley

[SCSI] qla4xxx: Do not send mbox command if FW is in failed state

FW is not able to process mbox command if FW state is failed. This will cause
mbox command to timeout and adapter reset. We have separate function to detect
FW failed state and do adapter reset. So to avoid mbox command timeout, do not
process mbox command in case of FW state failed.
Signed-off-by: default avatarVikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: default avatarPrasanna Mumbai <prasanna.mumbai@qlogic.com>
Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 9640de20
...@@ -32,6 +32,7 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, ...@@ -32,6 +32,7 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount,
u_long wait_count; u_long wait_count;
uint32_t intr_status; uint32_t intr_status;
unsigned long flags = 0; unsigned long flags = 0;
uint32_t dev_state;
/* Make sure that pointers are valid */ /* Make sure that pointers are valid */
if (!mbx_cmd || !mbx_sts) { if (!mbx_cmd || !mbx_sts) {
...@@ -40,12 +41,23 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount, ...@@ -40,12 +41,23 @@ int qla4xxx_mailbox_command(struct scsi_qla_host *ha, uint8_t inCount,
return status; return status;
} }
if (is_qla8022(ha) && if (is_qla8022(ha)) {
test_bit(AF_FW_RECOVERY, &ha->flags)) { if (test_bit(AF_FW_RECOVERY, &ha->flags)) {
DEBUG2(ql4_printk(KERN_WARNING, ha, "scsi%ld: %s: prematurely " DEBUG2(ql4_printk(KERN_WARNING, ha, "scsi%ld: %s: "
"completing mbx cmd as firmware recovery detected\n", "prematurely completing mbx cmd as firmware "
ha->host_no, __func__)); "recovery detected\n", ha->host_no, __func__));
return status; return status;
}
/* Do not send any mbx cmd if h/w is in failed state*/
qla4_8xxx_idc_lock(ha);
dev_state = qla4_8xxx_rd_32(ha, QLA82XX_CRB_DEV_STATE);
qla4_8xxx_idc_unlock(ha);
if (dev_state == QLA82XX_DEV_FAILED) {
ql4_printk(KERN_WARNING, ha, "scsi%ld: %s: H/W is in "
"failed state, do not send any mailbox commands\n",
ha->host_no, __func__);
return status;
}
} }
if ((is_aer_supported(ha)) && if ((is_aer_supported(ha)) &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment