{
        struct msix_entry entries[SGE_QSETS + 1];
        int vectors;
-       int i, err;
+       int i;
 
        vectors = ARRAY_SIZE(entries);
        for (i = 0; i < vectors; ++i)
                entries[i].entry = i;
 
-       while ((err = pci_enable_msix(adap->pdev, entries, vectors)) > 0)
-               vectors = err;
-
-       if (!err && vectors < (adap->params.nports + 1)) {
-               pci_disable_msix(adap->pdev);
-               err = -1;
-       }
+       vectors = pci_enable_msix_range(adap->pdev, entries,
+                                       adap->params.nports + 1, vectors);
+       if (vectors < 0)
+               return vectors;
 
-       if (!err) {
-               for (i = 0; i < vectors; ++i)
-                       adap->msix_info[i].vec = entries[i].vector;
-               adap->msix_nvectors = vectors;
-       }
+       for (i = 0; i < vectors; ++i)
+               adap->msix_info[i].vec = entries[i].vector;
+       adap->msix_nvectors = vectors;
 
-       return err;
+       return 0;
 }
 
 static void print_port_info(struct adapter *adap, const struct adapter_info *ai)