diff options
Diffstat (limited to 'drivers/scsi/megaraid/megaraid_sas_base.c')
-rw-r--r-- | drivers/scsi/megaraid/megaraid_sas_base.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index c787fed48ec7..fd2ce75b4d73 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c @@ -6846,12 +6846,12 @@ megasas_wait_for_adapter_operational(struct megasas_instance *instance) { int wait_time = MEGASAS_RESET_WAIT_TIME * 2; int i; - - if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) - return 1; + u8 adp_state; for (i = 0; i < wait_time; i++) { - if (atomic_read(&instance->adprecovery) == MEGASAS_HBA_OPERATIONAL) + adp_state = atomic_read(&instance->adprecovery); + if ((adp_state == MEGASAS_HBA_OPERATIONAL) || + (adp_state == MEGASAS_HW_CRITICAL_ERROR)) break; if (!(i % MEGASAS_RESET_NOTICE_INTERVAL)) @@ -6860,9 +6860,10 @@ megasas_wait_for_adapter_operational(struct megasas_instance *instance) msleep(1000); } - if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) { - dev_info(&instance->pdev->dev, "%s timed out while waiting for HBA to recover.\n", - __func__); + if (adp_state != MEGASAS_HBA_OPERATIONAL) { + dev_info(&instance->pdev->dev, + "%s HBA failed to become operational, adp_state %d\n", + __func__, adp_state); return 1; } |