Test against the invalid data pattern ~0 before testing valid data patterns. Reported-by: Derek Shute <derek.shute@xxxxxxxxxxx> Signed-off-by: Joe Lawrence <joe.lawrence@xxxxxxxxxxx> --- drivers/scsi/mpt2sas/mpt2sas_base.c | 7 ++++--- drivers/scsi/mpt3sas/mpt3sas_base.c | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c index 3fb01d1883c6..16d6fd5e037e 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_base.c +++ b/drivers/scsi/mpt2sas/mpt2sas_base.c @@ -2983,7 +2983,9 @@ _base_wait_for_doorbell_ack(struct MPT2SAS_ADAPTER *ioc, int timeout, cntdn = (sleep_flag == CAN_SLEEP) ? 1000*timeout : 2000*timeout; do { int_status = readl(&ioc->chip->HostInterruptStatus); - if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) { + if (int_status == 0xFFFFFFFF) + goto out; + else if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) { dhsprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " "successful count(%d), timeout(%d)\n", ioc->name, __func__, count, timeout)); @@ -2995,8 +2997,7 @@ _base_wait_for_doorbell_ack(struct MPT2SAS_ADAPTER *ioc, int timeout, mpt2sas_base_fault_info(ioc , doorbell); return -EFAULT; } - } else if (int_status == 0xFFFFFFFF) - goto out; + } if (sleep_flag == CAN_SLEEP) msleep(1); diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index b9c27398e206..878bf6ddd2a0 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -3157,7 +3157,9 @@ _base_wait_for_doorbell_ack(struct MPT3SAS_ADAPTER *ioc, int timeout, cntdn = (sleep_flag == CAN_SLEEP) ? 1000*timeout : 2000*timeout; do { int_status = readl(&ioc->chip->HostInterruptStatus); - if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) { + if (int_status == 0xFFFFFFFF) + goto out; + else if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) { dhsprintk(ioc, pr_info(MPT3SAS_FMT "%s: successful count(%d), timeout(%d)\n", ioc->name, __func__, count, timeout)); @@ -3169,8 +3171,7 @@ _base_wait_for_doorbell_ack(struct MPT3SAS_ADAPTER *ioc, int timeout, mpt3sas_base_fault_info(ioc , doorbell); return -EFAULT; } - } else if (int_status == 0xFFFFFFFF) - goto out; + } if (sleep_flag == CAN_SLEEP) usleep_range(1000, 1500); -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html