scsi: lpfc: Convert bootstrap mbx polling from msleep to udelay
authorJames Smart <jsmart2021@gmail.com>
Tue, 12 Mar 2019 23:30:15 +0000 (16:30 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 19 Mar 2019 16:57:02 +0000 (12:57 -0400)
Current code is using msleep when polling for hw ready. Unfortunately the
msleep routine isn't very accurate on rescheduling. In fact, on a busy
systems which reset the adapter, it became 10s of seconds before it was
rescheduled.

Fix by busy waiting using udelay. As we're now busy waiting, significantly
reduce the wait time so that we can exit the pool loop as soon as possible.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_sli.c

index 4b084a408e71302745eb30974e8967ce9c9afa37..5c162ab25a894a5ba142d9106dad93abc8faf206 100644 (file)
@@ -8507,7 +8507,7 @@ lpfc_sli4_wait_bmbx_ready(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
                bmbx_reg.word0 = readl(phba->sli4_hba.BMBXregaddr);
                db_ready = bf_get(lpfc_bmbx_rdy, &bmbx_reg);
                if (!db_ready)
-                       msleep(2);
+                       mdelay(2);
 
                if (time_after(jiffies, timeout))
                        return MBXERR_ERROR;