linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] lpfc: Fix mailbox command failure during driver initialization
@ 2021-09-21 14:30 James Smart
  2021-09-29  4:20 ` Martin K. Petersen
  0 siblings, 1 reply; 2+ messages in thread
From: James Smart @ 2021-09-21 14:30 UTC (permalink / raw)
  To: linux-scsi; +Cc: James Smart, Nigel Kirkland

Contention for the mailbox interface may occur during driver
initialization (immediately after a function reset), between mailbox
commands initiated via ioctl (bsg) and those driver requested by the
driver.

After setting SLI_ACTIVE flag for a port, there is a window in which
the driver will allow an ioctl to be initiated while the adapter is
initializing and issuing mailbox commands via polling. The polling
logic then gets confused.

Correct by having thread setting SLI_ACTIVE spot an active mailbox
command and allow it complete before proceeding.

Co-developed-by: Nigel Kirkland <nkirkland2304@gmail.com>
Signed-off-by: Nigel Kirkland <nkirkland2304@gmail.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc_sli.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 34cf2bfcce07..3f911cb48cf2 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -8158,6 +8158,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
 	struct lpfc_vport *vport = phba->pport;
 	struct lpfc_dmabuf *mp;
 	struct lpfc_rqb *rqbp;
+	u32 flg;
 
 	/* Perform a PCI function reset to start from clean */
 	rc = lpfc_pci_function_reset(phba);
@@ -8171,7 +8172,17 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
 	else {
 		spin_lock_irq(&phba->hbalock);
 		phba->sli.sli_flag |= LPFC_SLI_ACTIVE;
+		flg = phba->sli.sli_flag;
 		spin_unlock_irq(&phba->hbalock);
+		/* Allow a little time after setting SLI_ACTIVE for any polled
+		 * MBX commands to complete via BSG.
+		 */
+		for (i = 0; i < 50 && (flg & LPFC_SLI_MBOX_ACTIVE); i++) {
+			msleep(20);
+			spin_lock_irq(&phba->hbalock);
+			flg = phba->sli.sli_flag;
+			spin_unlock_irq(&phba->hbalock);
+		}
 	}
 
 	lpfc_sli4_dip(phba);
@@ -9755,7 +9766,7 @@ lpfc_sli_issue_mbox_s4(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
 					"(%d):2541 Mailbox command x%x "
 					"(x%x/x%x) failure: "
 					"mqe_sta: x%x mcqe_sta: x%x/x%x "
-					"Data: x%x x%x\n,",
+					"Data: x%x x%x\n",
 					mboxq->vport ? mboxq->vport->vpi : 0,
 					mboxq->u.mb.mbxCommand,
 					lpfc_sli_config_mbox_subsys_get(phba,
@@ -9789,7 +9800,7 @@ lpfc_sli_issue_mbox_s4(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
 					"(%d):2597 Sync Mailbox command "
 					"x%x (x%x/x%x) failure: "
 					"mqe_sta: x%x mcqe_sta: x%x/x%x "
-					"Data: x%x x%x\n,",
+					"Data: x%x x%x\n",
 					mboxq->vport ? mboxq->vport->vpi : 0,
 					mboxq->u.mb.mbxCommand,
 					lpfc_sli_config_mbox_subsys_get(phba,
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] lpfc: Fix mailbox command failure during driver initialization
  2021-09-21 14:30 [PATCH] lpfc: Fix mailbox command failure during driver initialization James Smart
@ 2021-09-29  4:20 ` Martin K. Petersen
  0 siblings, 0 replies; 2+ messages in thread
From: Martin K. Petersen @ 2021-09-29  4:20 UTC (permalink / raw)
  To: linux-scsi, James Smart; +Cc: Martin K . Petersen, Nigel Kirkland

On Tue, 21 Sep 2021 07:30:08 -0700, James Smart wrote:

> Contention for the mailbox interface may occur during driver
> initialization (immediately after a function reset), between mailbox
> commands initiated via ioctl (bsg) and those driver requested by the
> driver.
> 
> After setting SLI_ACTIVE flag for a port, there is a window in which
> the driver will allow an ioctl to be initiated while the adapter is
> initializing and issuing mailbox commands via polling. The polling
> logic then gets confused.
> 
> [...]

Applied to 5.16/scsi-queue, thanks!

[1/1] lpfc: Fix mailbox command failure during driver initialization
      https://git.kernel.org/mkp/scsi/c/efe1dc571a5b

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-09-29  4:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-21 14:30 [PATCH] lpfc: Fix mailbox command failure during driver initialization James Smart
2021-09-29  4:20 ` Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).