]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: lpfc: Move clearing of HBA_SETUP flag to before lpfc_sli4_queue_unset
authorJustin Tee <justin.tee@broadcom.com>
Wed, 18 Jun 2025 19:21:34 +0000 (12:21 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 23 Jun 2025 17:10:34 +0000 (13:10 -0400)
Move clearing of HBA_SETUP flag out of lpfc_sli_brdrestart_s4 and before
lpfc_sli4_queue_unset.  lpfc_sli4_queue_unset kfrees phba queues, so
clear the HBA_SETUP atomic flag to signal that the phba struct is no
longer initialized.

Also, add a check for the HBA_SETUP flag in the lpfc_sli4_io_xri_aborted
routine before dereferencing the ELS WQ.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20250618192138.124116-10-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_scsi.c
drivers/scsi/lpfc/lpfc_sli.c

index 31a9f142bcb9565740773c6e31695db2bdb1660c..46bc7b8041dfa149ada548722ec8d2da07ea13af 100644 (file)
@@ -536,7 +536,8 @@ lpfc_sli4_io_xri_aborted(struct lpfc_hba *phba,
                        psb = container_of(iocbq, struct lpfc_io_buf, cur_iocbq);
                        psb->flags &= ~LPFC_SBUF_XBUSY;
                        spin_unlock_irqrestore(&phba->hbalock, iflag);
-                       if (!list_empty(&pring->txq))
+                       if (test_bit(HBA_SETUP, &phba->hba_flag) &&
+                           !list_empty(&pring->txq))
                                lpfc_worker_wake_up(phba);
                        return;
                }
index 47bbcb78fb4d426b3b116ed93376b14cc3716641..372907debbe03481280457d43451fe9831a361b3 100644 (file)
@@ -5167,7 +5167,6 @@ lpfc_sli4_brdreset(struct lpfc_hba *phba)
        phba->link_events = 0;
        phba->pport->fc_myDID = 0;
        phba->pport->fc_prevDID = 0;
-       clear_bit(HBA_SETUP, &phba->hba_flag);
 
        spin_lock_irq(&phba->hbalock);
        psli->sli_flag &= ~(LPFC_PROCESS_LA);
@@ -5284,6 +5283,7 @@ lpfc_sli_brdrestart_s4(struct lpfc_hba *phba)
                        "0296 Restart HBA Data: x%x x%x\n",
                        phba->pport->port_state, psli->sli_flag);
 
+       clear_bit(HBA_SETUP, &phba->hba_flag);
        lpfc_sli4_queue_unset(phba);
 
        rc = lpfc_sli4_brdreset(phba);