lpfc 8.3.37: Removed use of NOP mailboxes for interrupt verification
Subsystems (2)
PATCH 4/11 lpfc 8.3.37: Removed use of NOP mailboxes for interrupt verification
Removed use of NOP mailboxes for interrupt verification in pci_probe_one_s4
Signed-off-by James Smart <[email protected]>
---
lpfc_init.c | 179 ++++++++---------------------------------------------------- 1 file changed, 26 insertions(+), 153 deletions(-)
drivers/scsi/lpfc/lpfc_init.c +26 -153
@@ -7664,78 +7664,6 @@ out: }/** -* lpfc_sli4_send_nop_mbox_cmds - Send sli-4 nop mailbox commands -* @phba: pointer to lpfc hba data structure. -* @cnt: number of nop mailbox commands to send. -* -* This routine is invoked to send a number @cnt of NOP mailbox command and -* wait for each command to complete. -* -* Return: the number of NOP mailbox command completed. -**/ -static int -lpfc_sli4_send_nop_mbox_cmds (struct lpfc_hba *phba,uint32_t cnt) -{ -LPFC_MBOXQ_t *mboxq; -int length, cmdsent; -uint32_t mbox_tmo; -uint32_t rc =0 ; -uint32_t shdr_status, shdr_add_status; -union lpfc_sli4_cfg_shdr *shdr; - -if (cnt ==0 ) { -lpfc_printf_log (phba,KERN_WARNING ,LOG_INIT , -"2518 Requested to send 0 NOP mailbox cmd\n" ); -return cnt; - } - - mboxq = (LPFC_MBOXQ_t *)mempool_alloc (phba->mbox_mem_pool,GFP_KERNEL ); -if (!mboxq) { -lpfc_printf_log (phba,KERN_ERR ,LOG_INIT , -"2519 Unable to allocate memory for issuing " -"NOP mailbox command\n" ); -return 0 ; - } - -/* Set up NOP SLI4_CONFIG mailbox-ioctl command */ - length = (sizeof (struct lpfc_mbx_nop ) - -sizeof (struct lpfc_sli4_cfg_mhdr )); - -for (cmdsent =0 ; cmdsent < cnt; cmdsent++) { -lpfc_sli4_config (phba, mboxq,LPFC_MBOX_SUBSYSTEM_COMMON , -LPFC_MBOX_OPCODE_NOP , length, -LPFC_SLI4_MBX_EMBED ); -if (!phba->sli4_hba.intr_enable) - rc =lpfc_sli_issue_mbox (phba, mboxq,MBX_POLL ); -else { - mbox_tmo =lpfc_mbox_tmo_val (phba, mboxq); - rc =lpfc_sli_issue_mbox_wait (phba, mboxq, mbox_tmo); - } -if (rc ==MBX_TIMEOUT ) -break ; -/* Check return status */ - shdr = (union lpfc_sli4_cfg_shdr *) - &mboxq->u.mqe.un.sli4_config.header.cfg_shdr; - shdr_status =bf_get (lpfc_mbox_hdr_status, &shdr->response); - shdr_add_status =bf_get (lpfc_mbox_hdr_add_status, - &shdr->response); -if (shdr_status || shdr_add_status || rc) { -lpfc_printf_log (phba,KERN_WARNING ,LOG_INIT , -"2520 NOP mailbox command failed " -"status x%x add_status x%x mbx " -"status x%x\n" , shdr_status, - shdr_add_status, rc); -break ; - } - } - -if (rc !=MBX_TIMEOUT ) -mempool_free (mboxq, phba->mbox_mem_pool); - -return cmdsent; -} - -/** * lpfc_sli4_pci_mem_setup - Setup SLI4 HBA PCI memory space. * @phba: pointer to lpfc hba data structure. *
@@ -8503,37 +8431,6 @@ lpfc_unset_hba(struct lpfc_hba *phba) }/** -* lpfc_sli4_unset_hba - Unset SLI4 hba device initialization. -* @phba: pointer to lpfc hba data structure. -* -* This routine is invoked to unset the HBA device initialization steps to -* a device with SLI-4 interface spec. -**/ -static void -lpfc_sli4_unset_hba (struct lpfc_hba *phba) -{ -struct lpfc_vport *vport = phba->pport; -struct Scsi_Host *shost =lpfc_shost_from_vport (vport); - -spin_lock_irq (shost->host_lock); - vport->load_flag |=FC_UNLOADING ; -spin_unlock_irq (shost->host_lock); - - phba->pport->work_port_events =0 ; - -/* Stop the SLI4 device port */ -lpfc_stop_port (phba); - -lpfc_sli4_disable_intr (phba); - -/* Reset SLI4 HBA FCoE function */ -lpfc_pci_function_reset (phba); -lpfc_sli4_queue_destroy (phba); - -return ; -} - -/** * lpfc_sli4_xri_exchange_busy_wait - Wait for device XRI exchange busy * @phba: Pointer to HBA context object. *
@@ -9595,7 +9492,6 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdstruct Scsi_Host *shost =NULL ;int error, ret;uint32_t cfg_mode, intr_mode; -int mcnt;int adjusted_fcp_io_channel;/* Allocate memory for HBA structure */
@@ -9684,58 +9580,35 @@ lpfc_pci_probe_one_s4(struct pci_dev *pd shost =lpfc_shost_from_vport (vport);/* save shost for error cleanup */ /* Now, trying to enable interrupt and bring up the device */ cfg_mode = phba->cfg_use_msi; -while (true) { -/* Put device to a known state before enabling interrupt */ -lpfc_stop_port (phba); -/* Configure and enable interrupt */ - intr_mode =lpfc_sli4_enable_intr (phba, cfg_mode); -if (intr_mode ==LPFC_INTR_ERROR ) { -lpfc_printf_log (phba,KERN_ERR ,LOG_INIT , -"0426 Failed to enable interrupt.\n" ); - error = -ENODEV ; - goto out_free_sysfs_attr; - } -/* Default to single EQ for non-MSI-X */ -if (phba->intr_type !=MSIX ) - adjusted_fcp_io_channel =1 ; -else - adjusted_fcp_io_channel = phba->cfg_fcp_io_channel; - phba->cfg_fcp_io_channel = adjusted_fcp_io_channel; -/* Set up SLI-4 HBA */ -if (lpfc_sli4_hba_setup (phba)) { -lpfc_printf_log (phba,KERN_ERR ,LOG_INIT , -"1421 Failed to set up hba\n" ); - error = -ENODEV ; - goto out_disable_intr; - } - -/* Send NOP mbx cmds for non-INTx mode active interrupt test */ -if (intr_mode !=0 ) - mcnt =lpfc_sli4_send_nop_mbox_cmds (phba, -LPFC_ACT_INTR_CNT ); -/* Check active interrupts received only for MSI/MSI-X */ -if (intr_mode ==0 || - phba->sli.slistat.sli_intr >=LPFC_ACT_INTR_CNT ) { -/* Log the current active interrupt mode */ - phba->intr_mode = intr_mode; -lpfc_log_intr_mode (phba, intr_mode); -break ; - } -lpfc_printf_log (phba,KERN_INFO ,LOG_INIT , -"0451 Configure interrupt mode (%d) " -"failed active interrupt test.\n" , - intr_mode); -/* Unset the previous SLI-4 HBA setup. */ -/* -* TODO: Is this operation compatible with IF TYPE 2 -* devices? All port state is deleted and cleared. -*/ -lpfc_sli4_unset_hba (phba); -/* Try next level of interrupt mode */ - cfg_mode = --intr_mode; +/* Put device to a known state before enabling interrupt */ +lpfc_stop_port (phba); +/* Configure and enable interrupt */ + intr_mode =lpfc_sli4_enable_intr (phba, cfg_mode); +if (intr_mode ==LPFC_INTR_ERROR ) { +lpfc_printf_log (phba,KERN_ERR ,LOG_INIT , +"0426 Failed to enable interrupt.\n" ); + error = -ENODEV ; + goto out_free_sysfs_attr; + } +/* Default to single EQ for non-MSI-X */ +if (phba->intr_type !=MSIX ) + adjusted_fcp_io_channel =1 ; +else + adjusted_fcp_io_channel = phba->cfg_fcp_io_channel; + phba->cfg_fcp_io_channel = adjusted_fcp_io_channel; +/* Set up SLI-4 HBA */ +if (lpfc_sli4_hba_setup (phba)) { +lpfc_printf_log (phba,KERN_ERR ,LOG_INIT , +"1421 Failed to set up hba\n" ); + error = -ENODEV ; + goto out_disable_intr; } +/* Log the current active interrupt mode */ + phba->intr_mode = intr_mode; +lpfc_log_intr_mode (phba, intr_mode); +/* Perform post initialization setup */ lpfc_post_init_setup (phba);