@@ -8639,13 +8639,17 @@ lpfc_sli4_enable_msix(struct lpfc_hba *phba)
/* Configure MSI-X capability structure */
vectors = phba->cfg_fcp_io_channel;
-enable_msix_vectors:
- rc = pci_enable_msix(phba->pcidev, phba->sli4_hba.msix_entries,
- vectors);
- if (rc > 1) {
- vectors = rc;
- goto enable_msix_vectors;
- } else if (rc) {
+
+ rc = pci_msix_table_size(phba->pcidev);
+ if (rc < 0)
+ goto msg_fail_out;
+
+ vectors = min(vectors, rc);
+ if (vectors > 1)
+ rc = pci_enable_msix(phba->pcidev, phba->sli4_hba.msix_entries,
+ vectors);
+ if (rc) {
+msg_fail_out:
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
"0484 PCI enable MSI-X failed (%d)\n", rc);
goto vec_fail_out;
As result of recent re-design of the MSI/MSI-X interrupts enabling pattern this driver has to be updated to use the new technique to obtain a optimal number of MSI/MSI-X interrupts required. Note, in case just one MSI-X vector was available the error message "0484 PCI enable MSI-X failed 1" is preserved to not break tools which might depend on it. Also, not sure why in case of multiple MSI-Xs mode failed the driver skips the single MSI-X mode and falls back to single MSI mode. Signed-off-by: Alexander Gordeev <agordeev@redhat.com> --- drivers/scsi/lpfc/lpfc_init.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-)