]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/pci/msi.c
Merge tag 'trace-v5.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux.git] / drivers / pci / msi.c
index 0884bedcfc7a6f92c308a643bde43d88c0ad2339..c7709e49f0e497065d528b2fbf753e30f919e3ba 100644 (file)
@@ -213,12 +213,13 @@ u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag)
 
        if (pci_msi_ignore_mask)
                return 0;
+
        desc_addr = pci_msix_desc_addr(desc);
        if (!desc_addr)
                return 0;
 
        mask_bits &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
-       if (flag)
+       if (flag & PCI_MSIX_ENTRY_CTRL_MASKBIT)
                mask_bits |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
 
        writel(mask_bits, desc_addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
@@ -861,7 +862,7 @@ static int pci_msi_supported(struct pci_dev *dev, int nvec)
        if (!pci_msi_enable)
                return 0;
 
-       if (!dev || dev->no_msi || dev->current_state != PCI_D0)
+       if (!dev || dev->no_msi)
                return 0;
 
        /*
@@ -972,7 +973,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries,
        int nr_entries;
        int i, j;
 
-       if (!pci_msi_supported(dev, nvec))
+       if (!pci_msi_supported(dev, nvec) || dev->current_state != PCI_D0)
                return -EINVAL;
 
        nr_entries = pci_msix_vec_count(dev);
@@ -1058,7 +1059,7 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
        int nvec;
        int rc;
 
-       if (!pci_msi_supported(dev, minvec))
+       if (!pci_msi_supported(dev, minvec) || dev->current_state != PCI_D0)
                return -EINVAL;
 
        /* Check whether driver already requested MSI-X IRQs */
@@ -1315,22 +1316,6 @@ const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
 }
 EXPORT_SYMBOL(pci_irq_get_affinity);
 
-/**
- * pci_irq_get_node - return the NUMA node of a particular MSI vector
- * @pdev:      PCI device to operate on
- * @vec:       device-relative interrupt vector index (0-based).
- */
-int pci_irq_get_node(struct pci_dev *pdev, int vec)
-{
-       const struct cpumask *mask;
-
-       mask = pci_irq_get_affinity(pdev, vec);
-       if (mask)
-               return local_memory_node(cpu_to_node(cpumask_first(mask)));
-       return dev_to_node(&pdev->dev);
-}
-EXPORT_SYMBOL(pci_irq_get_node);
-
 struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
 {
        return to_pci_dev(desc->dev);