lpfc 8.1.7 : Add lpfc_sli_flush_mbox_queue() function
Subsystems (2)
PATCH 13/15 lpfc 8.1.7 : Add lpfc_sli_flush_mbox_queue() function
Add lpfc_sli_flush_mbox_queue() function and use it in lpfc_offline() call to avoid deadlock on thread block.
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_crtn.h +1 -0
@@ -147,6 +147,7 @@ int lpfc_sli_hba_setup(struct lpfc_hba *int lpfc_sli_hba_down (struct lpfc_hba *);int lpfc_sli_issue_mbox (struct lpfc_hba *,LPFC_MBOXQ_t *,uint32_t );int lpfc_sli_handle_mb_event (struct lpfc_hba *); +int lpfc_sli_flush_mbox_queue (struct lpfc_hba *);int lpfc_sli_handle_slow_ring_event (struct lpfc_hba *,struct lpfc_sli_ring *,uint32_t );void lpfc_sli_def_mbox_cmpl (struct lpfc_hba *,LPFC_MBOXQ_t *);
drivers/scsi/lpfc/lpfc_init.c +1 -0
@@ -1353,6 +1353,7 @@ lpfc_offline(struct lpfc_hba * phba) psli = &phba->sli;lpfc_linkdown (phba); +lpfc_sli_flush_mbox_queue (phba);for (i =0 ; i < psli->num_rings; i++) { pring = &psli->ring[i];
drivers/scsi/lpfc/lpfc_sli.c +19 -1
@@ -578,7 +578,7 @@ lpfc_sli_handle_mb_event(struct lpfc_hba/* Stray Mailbox Interrupt, mbxCommand <cmd> mbxStatus <status> */ lpfc_printf_log(phba, - KERN_ERR, + KERN_WARNING, LOG_MBOX | LOG_SLI, "%d:0304 Stray Mailbox Interrupt " "mbxCommand x%x mbxStatus x%x\n",
@@ -3085,6 +3085,24 @@ lpfc_sli_issue_mbox_wait(struct lpfc_hbareturn retval; } +int +lpfc_sli_flush_mbox_queue (struct lpfc_hba * phba) +{ +int i =0 ; + +while (phba->sli.sli_flag &LPFC_SLI_MBOX_ACTIVE && !phba->stopped) { +if (i++ >LPFC_MBOX_TMO *1000 ) +return 1 ; + +if (lpfc_sli_handle_mb_event (phba) ==0 ) + i =0 ; + +msleep (1 ); + } + +return (phba->sli.sli_flag &LPFC_SLI_MBOX_ACTIVE ) ?1 :0 ; +} +irqreturn_t lpfc_intr_handler (int irq,void *dev_id,struct pt_regs * regs) {