Test against the invalid data pattern ~0 before testing valid data
patterns.

Reported-by: Derek Shute <[email protected]>
Signed-off-by: Joe Lawrence <[email protected]>
---
 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to