Commit 64ff64b9 authored by Shivasharan S's avatar Shivasharan S Committed by Martin K. Petersen

scsi: megaraid_sas: enable intx only if msix request fails

Without this fix, driver will enable INTx Interrupt pin even though
MSI-x vectors are enabled. See below lspci output. DisINTx is unset for
MSIx setup.

lspci -s 85:00.0 -vvv |grep INT |grep Control
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR+ FastB2B- DisINTx-

After applying this fix, driver will enable INTx Interrupt pin only if
Legacy interrupt method is required.  See below lspci output. DisINTx is
set for MSIx setup.  lspci -s 85:00.0 -vvv |grep INT |grep Control
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR+ FastB2B- DisINTx+
Signed-off-by: default avatarKashyap Desai <kashyap.desai@broadcom.com>
Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 85e8a239
...@@ -5034,10 +5034,12 @@ megasas_setup_irqs_msix(struct megasas_instance *instance, u8 is_probe) ...@@ -5034,10 +5034,12 @@ megasas_setup_irqs_msix(struct megasas_instance *instance, u8 is_probe)
&instance->irq_context[j]); &instance->irq_context[j]);
/* Retry irq register for IO_APIC*/ /* Retry irq register for IO_APIC*/
instance->msix_vectors = 0; instance->msix_vectors = 0;
if (is_probe) if (is_probe) {
pci_free_irq_vectors(instance->pdev);
return megasas_setup_irqs_ioapic(instance); return megasas_setup_irqs_ioapic(instance);
else } else {
return -1; return -1;
}
} }
} }
return 0; return 0;
...@@ -5277,9 +5279,11 @@ static int megasas_init_fw(struct megasas_instance *instance) ...@@ -5277,9 +5279,11 @@ static int megasas_init_fw(struct megasas_instance *instance)
MPI2_REPLY_POST_HOST_INDEX_OFFSET); MPI2_REPLY_POST_HOST_INDEX_OFFSET);
} }
i = pci_alloc_irq_vectors(instance->pdev, 1, 1, PCI_IRQ_LEGACY); if (!instance->msix_vectors) {
if (i < 0) i = pci_alloc_irq_vectors(instance->pdev, 1, 1, PCI_IRQ_LEGACY);
goto fail_setup_irqs; if (i < 0)
goto fail_setup_irqs;
}
dev_info(&instance->pdev->dev, dev_info(&instance->pdev->dev,
"firmware supports msix\t: (%d)", fw_msix_count); "firmware supports msix\t: (%d)", fw_msix_count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment