mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-29 04:09:39 +00:00
scsi: lpfc: Fix sli4 adapter initialization with MSI
When forcing the use of MSI (vs MSI-X) the driver is crashing in pci_irq_get_affinity. The driver was not using the new pci_alloc_irq_vectors interface in the MSI path. Fix by using pci_alloc_irq_vectors() with PCI_RQ_MSI in the MSI path. Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
6a224b47fd
commit
07b1b91412
1 changed files with 9 additions and 8 deletions
|
@ -11119,10 +11119,10 @@ lpfc_sli4_enable_msix(struct lpfc_hba *phba)
|
|||
* @phba: pointer to lpfc hba data structure.
|
||||
*
|
||||
* This routine is invoked to enable the MSI interrupt mode to device with
|
||||
* SLI-4 interface spec. The kernel function pci_enable_msi() is called
|
||||
* to enable the MSI vector. The device driver is responsible for calling
|
||||
* the request_irq() to register MSI vector with a interrupt the handler,
|
||||
* which is done in this function.
|
||||
* SLI-4 interface spec. The kernel function pci_alloc_irq_vectors() is
|
||||
* called to enable the MSI vector. The device driver is responsible for
|
||||
* calling the request_irq() to register MSI vector with a interrupt the
|
||||
* handler, which is done in this function.
|
||||
*
|
||||
* Return codes
|
||||
* 0 - successful
|
||||
|
@ -11133,20 +11133,21 @@ lpfc_sli4_enable_msi(struct lpfc_hba *phba)
|
|||
{
|
||||
int rc, index;
|
||||
|
||||
rc = pci_enable_msi(phba->pcidev);
|
||||
if (!rc)
|
||||
rc = pci_alloc_irq_vectors(phba->pcidev, 1, 1,
|
||||
PCI_IRQ_MSI | PCI_IRQ_AFFINITY);
|
||||
if (rc > 0)
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
|
||||
"0487 PCI enable MSI mode success.\n");
|
||||
else {
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
|
||||
"0488 PCI enable MSI mode failed (%d)\n", rc);
|
||||
return rc;
|
||||
return rc ? rc : -1;
|
||||
}
|
||||
|
||||
rc = request_irq(phba->pcidev->irq, lpfc_sli4_intr_handler,
|
||||
0, LPFC_DRIVER_NAME, phba);
|
||||
if (rc) {
|
||||
pci_disable_msi(phba->pcidev);
|
||||
pci_free_irq_vectors(phba->pcidev);
|
||||
lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
|
||||
"0490 MSI request_irq failed (%d)\n", rc);
|
||||
return rc;
|
||||
|
|
Loading…
Reference in a new issue