scsi: smartpqi: Fix boot failure during LUN rebuild
authorMike McGowen <Mike.McGowen@microchip.com>
Tue, 28 Sep 2021 23:54:39 +0000 (18:54 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 5 Oct 2021 04:13:15 +0000 (00:13 -0400)
Move the delay in the register polling loop to the beginning of the loop to
ensure there is always a delay between writing the register and reading it.

Link: https://lore.kernel.org/r/20210928235442.201875-9-don.brace@microchip.com
Reviewed-by: Scott Benesh <scott.benesh@microchip.com>
Reviewed-by: Scott Teel <scott.teel@microchip.com>
Acked-by: John Donnelly <john.p.donnelly@oracle.com>
Signed-off-by: Mike McGowen <Mike.McGowen@microchip.com>
Signed-off-by: Don Brace <don.brace@microchip.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/smartpqi/smartpqi_init.c

index 1e27e6ba015993506a5f712dac68465bae11eb4b..c28eb7ea4a243cc874bfd6cb448f23c1e0172456 100644 (file)
@@ -4278,12 +4278,12 @@ static int pqi_create_admin_queues(struct pqi_ctrl_info *ctrl_info)
 
        timeout = PQI_ADMIN_QUEUE_CREATE_TIMEOUT_JIFFIES + jiffies;
        while (1) {
+               msleep(PQI_ADMIN_QUEUE_CREATE_POLL_INTERVAL_MSECS);
                status = readb(&pqi_registers->function_and_status_code);
                if (status == PQI_STATUS_IDLE)
                        break;
                if (time_after(jiffies, timeout))
                        return -ETIMEDOUT;
-               msleep(PQI_ADMIN_QUEUE_CREATE_POLL_INTERVAL_MSECS);
        }
 
        /*