|
@@ -676,6 +676,50 @@ qla2x00_wait_for_hba_online(scsi_qla_host_t *vha)
|
|
|
return (return_status);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * 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
|
|
|
+ */
|
|
|
+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;
|
|
|
+
|
|
|
+ DEBUG2(printk("%s return_status=%d\n", __func__, return_status));
|
|
|
+
|
|
|
+ return return_status;
|
|
|
+}
|
|
|
+
|
|
|
int
|
|
|
qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha)
|
|
|
{
|
|
@@ -1081,7 +1125,7 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
|
|
|
qla_printk(KERN_INFO, ha,
|
|
|
"scsi(%ld:%d:%d): ADAPTER RESET ISSUED.\n", vha->host_no, id, lun);
|
|
|
|
|
|
- if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS)
|
|
|
+ if (qla2x00_wait_for_reset_ready(vha) != QLA_SUCCESS)
|
|
|
goto eh_host_reset_lock;
|
|
|
|
|
|
/*
|