static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
                                        int vectors)
 {
-       int err = 0;
        int vector_threshold;
 
        /* We'll want at least 2 (vector_threshold):
         * Right now, we simply care about how many we'll get; we'll
         * set them up later while requesting irq's.
         */
-       while (vectors >= vector_threshold) {
-               err = pci_enable_msix(adapter->pdev, adapter->msix_entries,
-                                     vectors);
-               if (!err || err < 0) /* Success or a nasty failure. */
-                       break;
-               else /* err == number of vectors we should try again with */
-                       vectors = err;
-       }
+       vectors = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
+                                       vector_threshold, vectors);
 
-       if (vectors < vector_threshold)
-               err = -ENOMEM;
-
-       if (err) {
+       if (vectors < 0) {
                dev_err(&adapter->pdev->dev,
                        "Unable to allocate MSI-X interrupts\n");
                kfree(adapter->msix_entries);
                adapter->msix_entries = NULL;
-       } else {
-               /*
-                * Adjust for only the vectors we'll use, which is minimum
-                * of max_msix_q_vectors + NON_Q_VECTORS, or the number of
-                * vectors we were allocated.
-                */
-               adapter->num_msix_vectors = vectors;
+               return vectors;
        }
 
-       return err;
+       /* Adjust for only the vectors we'll use, which is minimum
+        * of max_msix_q_vectors + NON_Q_VECTORS, or the number of
+        * vectors we were allocated.
+        */
+       adapter->num_msix_vectors = vectors;
+
+       return 0;
 }
 
 /**