]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/pci/msi.c
PCI/MSI: Don't warn when irq_create_affinity_masks() returns NULL
[karo-tx-linux.git] / drivers / pci / msi.c
index ba44fdfda66bb5caba6c74d9ad056b34a2d01068..2225afc1cbbb76a39c516230a58c8e8752b568f9 100644 (file)
@@ -538,12 +538,9 @@ msi_setup_entry(struct pci_dev *dev, int nvec, const struct irq_affinity *affd)
        struct msi_desc *entry;
        u16 control;
 
-       if (affd) {
+       if (affd)
                masks = irq_create_affinity_masks(nvec, affd);
-               if (!masks)
-                       dev_err(&dev->dev, "can't allocate MSI affinity masks for %d vectors\n",
-                               nvec);
-       }
+
 
        /* MSI Entry Initialization */
        entry = alloc_msi_entry(&dev->dev, nvec, masks);
@@ -679,12 +676,8 @@ static int msix_setup_entries(struct pci_dev *dev, void __iomem *base,
        struct msi_desc *entry;
        int ret, i;
 
-       if (affd) {
+       if (affd)
                masks = irq_create_affinity_masks(nvec, affd);
-               if (!masks)
-                       dev_err(&dev->dev, "can't allocate MSI-X affinity masks for %d vectors\n",
-                               nvec);
-       }
 
        for (i = 0, curmsk = masks; i < nvec; i++) {
                entry = alloc_msi_entry(&dev->dev, 1, curmsk);
@@ -1058,7 +1051,7 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
 
        for (;;) {
                if (affd) {
-                       nvec = irq_calc_affinity_vectors(nvec, affd);
+                       nvec = irq_calc_affinity_vectors(minvec, nvec, affd);
                        if (nvec < minvec)
                                return -ENOSPC;
                }
@@ -1097,7 +1090,7 @@ static int __pci_enable_msix_range(struct pci_dev *dev,
 
        for (;;) {
                if (affd) {
-                       nvec = irq_calc_affinity_vectors(nvec, affd);
+                       nvec = irq_calc_affinity_vectors(minvec, nvec, affd);
                        if (nvec < minvec)
                                return -ENOSPC;
                }
@@ -1165,16 +1158,6 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
        if (flags & PCI_IRQ_AFFINITY) {
                if (!affd)
                        affd = &msi_default_affd;
-
-               if (affd->pre_vectors + affd->post_vectors > min_vecs)
-                       return -EINVAL;
-
-               /*
-                * If there aren't any vectors left after applying the pre/post
-                * vectors don't bother with assigning affinity.
-                */
-               if (affd->pre_vectors + affd->post_vectors == min_vecs)
-                       affd = NULL;
        } else {
                if (WARN_ON(affd))
                        affd = NULL;
@@ -1463,7 +1446,7 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
        if (!domain)
                return NULL;
 
-       domain->bus_token = DOMAIN_BUS_PCI_MSI;
+       irq_domain_update_bus_token(domain, DOMAIN_BUS_PCI_MSI);
        return domain;
 }
 EXPORT_SYMBOL_GPL(pci_msi_create_irq_domain);