if (msix_entries < ndev->limits.msix_cnt)
                return -ENOSPC;
 
-       rc = pci_enable_msix(pdev, ndev->msix_entries, msix_entries);
+       rc = pci_enable_msix_exact(pdev, ndev->msix_entries, msix_entries);
        if (rc < 0)
                return rc;
-       else if (rc > 0)
-               return -ENOSPC;
 
        for (i = 0; i < msix_entries; i++) {
                msix = &ndev->msix_entries[i];
        struct msix_entry *msix;
        int rc, i;
 
-retry:
-       rc = pci_enable_msix(pdev, ndev->msix_entries, msix_entries);
-       if (rc < 0)
-               return rc;
-       else if (rc > 0) {
-               dev_warn(&pdev->dev,
-                        "Only %d MSI-X vectors. "
-                        "Limiting the number of queues to that number.\n",
-                        rc);
-               msix_entries = rc;
-               goto retry;
-       }
+       msix_entries = pci_enable_msix_range(pdev, ndev->msix_entries,
+                                            1, msix_entries);
+       if (msix_entries < 0)
+               return msix_entries;
 
        for (i = 0; i < msix_entries; i++) {
                msix = &ndev->msix_entries[i];