Hello James Smart,

The patch cdb42becdd40: "scsi: lpfc: Replace io_channels for nvme and
fcp with general hdw_queues per cpu" from Jan 28, 2019, leads to the
following static checker warning:

        drivers/scsi/lpfc/lpfc_init.c:11136 lpfc_sli4_hba_unset()
        error: we previously assumed 'phba->pport' could be null (see line 
11074)

drivers/scsi/lpfc/lpfc_init.c
    11065 static void
    11066 lpfc_sli4_hba_unset(struct lpfc_hba *phba)
    11067 {
    11068       int wait_cnt = 0;
    11069       LPFC_MBOXQ_t *mboxq;
    11070       struct pci_dev *pdev = phba->pcidev;
    11071 
    11072       lpfc_stop_hba_timers(phba);
    11073       if (phba->pport)
                    ^^^^^^^^^^^
New check for NULL.

    11074               phba->sli4_hba.intr_enable = 0;
    11075 
    11076       /*
    11077        * Gracefully wait out the potential current outstanding 
asynchronous
    11078        * mailbox command.
    11079        */
    11080 
    11081       /* First, block any pending async mailbox command from posted */
    11082       spin_lock_irq(&phba->hbalock);
    11083       phba->sli.sli_flag |= LPFC_SLI_ASYNC_MBX_BLK;
    11084       spin_unlock_irq(&phba->hbalock);
    11085       /* Now, trying to wait it out if we can */
    11086       while (phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE) {
    11087               msleep(10);
    11088               if (++wait_cnt > LPFC_ACTIVE_MBOX_WAIT_CNT)
    11089                       break;
    11090       }
    11091       /* Forcefully release the outstanding mailbox command if timed 
out */
    11092       if (phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE) {
    11093               spin_lock_irq(&phba->hbalock);
    11094               mboxq = phba->sli.mbox_active;
    11095               mboxq->u.mb.mbxStatus = MBX_NOT_FINISHED;
    11096               __lpfc_mbox_cmpl_put(phba, mboxq);
    11097               phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
    11098               phba->sli.mbox_active = NULL;
    11099               spin_unlock_irq(&phba->hbalock);
    11100       }
    11101 
    11102       /* Abort all iocbs associated with the hba */
    11103       lpfc_sli_hba_iocb_abort(phba);
    11104 
    11105       /* Wait for completion of device XRI exchange busy */
    11106       lpfc_sli4_xri_exchange_busy_wait(phba);
    11107 
    11108       /* Disable PCI subsystem interrupt */
    11109       lpfc_sli4_disable_intr(phba);
    11110 
    11111       /* Disable SR-IOV if enabled */
    11112       if (phba->cfg_sriov_nr_virtfn)
    11113               pci_disable_sriov(pdev);
    11114 
    11115       /* Stop kthread signal shall trigger work_done one more time */
    11116       kthread_stop(phba->worker_thread);
    11117 
    11118       /* Disable FW logging to host memory */
    11119       lpfc_ras_stop_fwlog(phba);
    11120 
    11121       /* Unset the queues shared with the hardware then release all
    11122        * allocated resources.
    11123        */
    11124       lpfc_sli4_queue_unset(phba);
    11125       lpfc_sli4_queue_destroy(phba);
    11126 
    11127       /* Reset SLI4 HBA FCoE function */
    11128       lpfc_pci_function_reset(phba);
    11129 
    11130       /* Free RAS DMA memory */
    11131       if (phba->ras_fwlog.ras_enabled)
    11132               lpfc_sli4_ras_dma_free(phba);
    11133 
    11134       /* Stop the SLI4 device port */
--> 11135       phba->pport->work_port_events = 0;
                ^^^^^^^^^^^^^
Unchecked dereference.

    11136 }

regards,
dan carpenter

Reply via email to