Commit 6512719b authored by Andrew Vasquez's avatar Andrew Vasquez Committed by James Bottomley

qla2xxx: ISR fixes

Interrupt handler fixes:

     o Mark HBA offline in case the firmware cannot recover
       after and ISP system-error.
     o Correct issue where the loop-down-timer was not properly
       being cleared during a port-update event.
Signed-off-by: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent a53176be
...@@ -376,7 +376,14 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx) ...@@ -376,7 +376,14 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx)
qla2100_fw_dump(ha, 1); qla2100_fw_dump(ha, 1);
else else
qla2300_fw_dump(ha, 1); qla2300_fw_dump(ha, 1);
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
if (mb[1] == 0) {
qla_printk(KERN_INFO, ha,
"Unrecoverable Hardware Error: adapter marked "
"OFFLINE!\n");
ha->flags.online = 0;
} else
set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
break; break;
case MBA_REQ_TRANSFER_ERR: /* Request Transfer Error */ case MBA_REQ_TRANSFER_ERR: /* Request Transfer Error */
...@@ -583,11 +590,13 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx) ...@@ -583,11 +590,13 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx)
} }
/* /*
* If PORT UPDATE is global (received LIP_OCCURRED/LIP_RESET * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET
* event etc. earlier indicating loop is down) then process * event etc. earlier indicating loop is down) then process
* it. Otherwise ignore it and Wait for RSCN to come in. * it. Otherwise ignore it and Wait for RSCN to come in.
*/ */
if (atomic_read(&ha->loop_state) != LOOP_DOWN) { atomic_set(&ha->loop_down_timer, 0);
if (atomic_read(&ha->loop_state) != LOOP_DOWN &&
atomic_read(&ha->loop_state) != LOOP_DEAD) {
DEBUG2(printk("scsi(%ld): Asynchronous PORT UPDATE " DEBUG2(printk("scsi(%ld): Asynchronous PORT UPDATE "
"ignored.\n", ha->host_no)); "ignored.\n", ha->host_no));
break; break;
...@@ -604,7 +613,6 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx) ...@@ -604,7 +613,6 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx)
*/ */
atomic_set(&ha->loop_state, LOOP_UP); atomic_set(&ha->loop_state, LOOP_UP);
atomic_set(&ha->loop_down_timer, 0);
qla2x00_mark_all_devices_lost(ha); qla2x00_mark_all_devices_lost(ha);
ha->flags.rscn_queue_overflow = 1; ha->flags.rscn_queue_overflow = 1;
......
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