|
@@ -865,51 +865,6 @@ qla2x00_wait_for_hba_ready(scsi_qla_host_t *vha)
|
|
|
msleep(1000);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * qla2x00_wait_for_reset_ready
|
|
|
- * Wait till the HBA is online after going through
|
|
|
- * <= MAX_RETRIES_OF_ISP_ABORT or
|
|
|
- * finally HBA is disabled ie marked offline or flash
|
|
|
- * operations are in progress.
|
|
|
- *
|
|
|
- * Input:
|
|
|
- * ha - pointer to host adapter structure
|
|
|
- *
|
|
|
- * Note:
|
|
|
- * Does context switching-Release SPIN_LOCK
|
|
|
- * (if any) before calling this routine.
|
|
|
- *
|
|
|
- * Return:
|
|
|
- * Success (Adapter is online/no flash ops) : 0
|
|
|
- * Failed (Adapter is offline/disabled/flash ops in progress) : 1
|
|
|
- */
|
|
|
-static int
|
|
|
-qla2x00_wait_for_reset_ready(scsi_qla_host_t *vha)
|
|
|
-{
|
|
|
- int return_status;
|
|
|
- unsigned long wait_online;
|
|
|
- struct qla_hw_data *ha = vha->hw;
|
|
|
- scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
|
|
|
-
|
|
|
- wait_online = jiffies + (MAX_LOOP_TIMEOUT * HZ);
|
|
|
- while (((test_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags)) ||
|
|
|
- test_bit(ABORT_ISP_ACTIVE, &base_vha->dpc_flags) ||
|
|
|
- test_bit(ISP_ABORT_RETRY, &base_vha->dpc_flags) ||
|
|
|
- ha->optrom_state != QLA_SWAITING ||
|
|
|
- ha->dpc_active) && time_before(jiffies, wait_online))
|
|
|
- msleep(1000);
|
|
|
-
|
|
|
- if (base_vha->flags.online && ha->optrom_state == QLA_SWAITING)
|
|
|
- return_status = QLA_SUCCESS;
|
|
|
- else
|
|
|
- return_status = QLA_FUNCTION_FAILED;
|
|
|
-
|
|
|
- ql_dbg(ql_dbg_taskm, vha, 0x8019,
|
|
|
- "%s return status=%d.\n", __func__, return_status);
|
|
|
-
|
|
|
- return return_status;
|
|
|
-}
|
|
|
-
|
|
|
int
|
|
|
qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha)
|
|
|
{
|
|
@@ -1274,7 +1229,11 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
|
|
|
ql_log(ql_log_info, vha, 0x8018,
|
|
|
"ADAPTER RESET ISSUED nexus=%ld:%d:%d.\n", vha->host_no, id, lun);
|
|
|
|
|
|
- if (qla2x00_wait_for_reset_ready(vha) != QLA_SUCCESS)
|
|
|
+ /*
|
|
|
+ * No point in issuing another reset if one is active. Also do not
|
|
|
+ * attempt a reset if we are updating flash.
|
|
|
+ */
|
|
|
+ if (qla2x00_reset_active(vha) || ha->optrom_state != QLA_SWAITING)
|
|
|
goto eh_host_reset_lock;
|
|
|
|
|
|
if (vha != base_vha) {
|