static int pci_msi_enable = 1;
 static int last_alloc_vector;
 static int nr_released_vectors;
-static int nr_reserved_vectors = NR_HP_RESERVED_VECTORS;
-static int nr_msix_devices;
 
 #ifndef CONFIG_X86_IO_APIC
 int vector_irq[NR_VECTORS] = { [0 ... NR_VECTORS - 1] = -1};
 {
        if (!dev)
                return;
-
-       if (pci_find_capability(dev, PCI_CAP_ID_MSIX) > 0)
-               nr_msix_devices++;
-       else if (pci_find_capability(dev, PCI_CAP_ID_MSI) > 0)
-               nr_reserved_vectors++;
 }
 
 #ifdef CONFIG_PM
                attach_msi_entry(entry, vector);
        }
        if (i != nvec) {
+               int avail = i - 1;
                i--;
                for (; i >= 0; i--) {
                        vector = (entries + i)->vector;
                        msi_free_vector(dev, vector, 0);
                        (entries + i)->vector = 0;
                }
-               return -EBUSY;
+               /* If we had some success report the number of irqs
+                * we succeeded in setting up.
+                */
+               if (avail <= 0)
+                       avail = -EBUSY;
+               return avail;
        }
        /* Set MSI-X enabled bits */
        enable_msi_mode(dev, pos, PCI_CAP_ID_MSIX);
                        return -EINVAL;
        }
        status = msi_capability_init(dev);
-       if (!status) {
-               if (!pos)
-                       nr_reserved_vectors--;  /* Only MSI capable */
-               else if (nr_msix_devices > 0)
-                       nr_msix_devices--;      /* Both MSI and MSI-X capable,
-                                                  but choose enabling MSI */
-       }
-
        return status;
 }
 
  **/
 int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
 {
-       int status, pos, nr_entries, free_vectors;
+       int status, pos, nr_entries;
        int i, j, temp;
        u16 control;
-       unsigned long flags;
 
        if (!entries || pci_msi_supported(dev) < 0)
                return -EINVAL;
                dev->irq = temp;
                return -EINVAL;
        }
-
-       spin_lock_irqsave(&msi_lock, flags);
-       /*
-        * msi_lock is provided to ensure that enough vectors resources are
-        * available before granting.
-        */
-       free_vectors = pci_vector_resources(last_alloc_vector,
-                               nr_released_vectors);
-       /* Ensure that each MSI/MSI-X device has one vector reserved by
-          default to avoid any MSI-X driver to take all available
-          resources */
-       free_vectors -= nr_reserved_vectors;
-       /* Find the average of free vectors among MSI-X devices */
-       if (nr_msix_devices > 0)
-               free_vectors /= nr_msix_devices;
-       spin_unlock_irqrestore(&msi_lock, flags);
-
-       if (nvec > free_vectors) {
-               if (free_vectors > 0)
-                       return free_vectors;
-               else
-                       return -EBUSY;
-       }
-
        status = msix_capability_init(dev, entries, nvec);
-       if (!status && nr_msix_devices > 0)
-               nr_msix_devices--;
-
        return status;
 }
 
 
 
 #include <asm/msi.h>
 
-/*
- * Assume the maximum number of hot plug slots supported by the system is about
- * ten. The worstcase is that each of these slots is hot-added with a device,
- * which has two MSI/MSI-X capable functions. To avoid any MSI-X driver, which
- * attempts to request all available vectors, NR_HP_RESERVED_VECTORS is defined
- * as below to ensure at least one message is assigned to each detected MSI/
- * MSI-X device function.
- */
-#define NR_HP_RESERVED_VECTORS         20
-
 extern int vector_irq[NR_VECTORS];
 extern void (*interrupt[NR_IRQS])(void);
-extern int pci_vector_resources(int last, int nr_released);
 
 /*
  * MSI-X Address Register