]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge branch 'pci/msi'
authorBjorn Helgaas <bhelgaas@google.com>
Thu, 28 Nov 2019 14:54:34 +0000 (08:54 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 28 Nov 2019 14:54:34 +0000 (08:54 -0600)
  - Remove unused pci_irq_get_node() Greg Kroah-Hartman)

  - Move power state check out of pci_msi_supported() (Bjorn Helgaas)

  - Fix incorrect MSI-X masking on resume and revert related nvme quirk for
    Kingston NVME SSD running FW E8FK11.T (Jian-Hong Pan)

  - Make asm/msi.h mandatory and simplify PCI_MSI_IRQ_DOMAIN Kconfig
    (Palmer Dabbelt, Michal Simek)

* pci/msi:
  PCI: Remove PCI_MSI_IRQ_DOMAIN architecture whitelist
  asm-generic: Make msi.h a mandatory include/asm header
  Revert "nvme: Add quirk for Kingston NVME SSD running FW E8FK11.T"
  PCI/MSI: Fix incorrect MSI-X masking on resume
  PCI/MSI: Move power state check out of pci_msi_supported()
  PCI/MSI: Remove unused pci_irq_get_node()

12 files changed:
arch/arc/include/asm/Kbuild
arch/arm/include/asm/Kbuild
arch/arm64/include/asm/Kbuild
arch/mips/include/asm/Kbuild
arch/powerpc/include/asm/Kbuild
arch/riscv/include/asm/Kbuild
arch/sparc/include/asm/Kbuild
drivers/nvme/host/core.c
drivers/pci/Kconfig
drivers/pci/msi.c
include/asm-generic/Kbuild
include/linux/pci.h

index 393d4f5e145032bafca421778f2daa0df6227438..1b505694691efd7b9f978d060b919d3d439221ac 100644 (file)
@@ -17,7 +17,6 @@ generic-y += local64.h
 generic-y += mcs_spinlock.h
 generic-y += mm-arch-hooks.h
 generic-y += mmiowb.h
-generic-y += msi.h
 generic-y += parport.h
 generic-y += percpu.h
 generic-y += preempt.h
index 68ca86f85eb7351e984983bbb3ecbf240e3c79ac..fa579b23b4dfab6152ba9788f2e2df80aebdc26c 100644 (file)
@@ -12,7 +12,6 @@ generic-y += local.h
 generic-y += local64.h
 generic-y += mm-arch-hooks.h
 generic-y += mmiowb.h
-generic-y += msi.h
 generic-y += parport.h
 generic-y += preempt.h
 generic-y += seccomp.h
index 98a5405c855882376e94baecdeaccf4082c60b13..bd23f87d6c55a17ce11d774e527ef6588fd10918 100644 (file)
@@ -16,7 +16,6 @@ generic-y += local64.h
 generic-y += mcs_spinlock.h
 generic-y += mm-arch-hooks.h
 generic-y += mmiowb.h
-generic-y += msi.h
 generic-y += qrwlock.h
 generic-y += qspinlock.h
 generic-y += serial.h
index c8b595c60910e288d64b92f9f2c04f3b54449f10..61b0fc2026e62b61a3b9150bf45c885f9b9c5217 100644 (file)
@@ -13,7 +13,6 @@ generic-y += irq_work.h
 generic-y += local64.h
 generic-y += mcs_spinlock.h
 generic-y += mm-arch-hooks.h
-generic-y += msi.h
 generic-y += parport.h
 generic-y += percpu.h
 generic-y += preempt.h
index 64870c7be4a3f43b392899524b55274ea05012b6..17726f2e46de63d0ab0bd1c9710cfb88bf63e175 100644 (file)
@@ -10,4 +10,3 @@ generic-y += local64.h
 generic-y += mcs_spinlock.h
 generic-y += preempt.h
 generic-y += vtime.h
-generic-y += msi.h
index 16970f246860c3373465bd40669458ad42035505..1efaeddf1e4b97abe1de77dc119cd41ac01e343b 100644 (file)
@@ -22,7 +22,6 @@ generic-y += kvm_para.h
 generic-y += local.h
 generic-y += local64.h
 generic-y += mm-arch-hooks.h
-generic-y += msi.h
 generic-y += percpu.h
 generic-y += preempt.h
 generic-y += sections.h
index b6212164847b706daef58fc711cb94fde4395a30..62de2eb2773d3e0b28bccee140b7a1e686a5acef 100644 (file)
@@ -18,7 +18,6 @@ generic-y += mcs_spinlock.h
 generic-y += mm-arch-hooks.h
 generic-y += mmiowb.h
 generic-y += module.h
-generic-y += msi.h
 generic-y += preempt.h
 generic-y += serial.h
 generic-y += trace_clock.h
index fa7ba09dca77199708b2729a6747ad9c96c9e84f..94bfbee1e5f74722d0597f1b1e7d3c20d8d2fbe9 100644 (file)
@@ -2404,16 +2404,6 @@ static const struct nvme_core_quirk_entry core_quirks[] = {
                .vid = 0x14a4,
                .fr = "22301111",
                .quirks = NVME_QUIRK_SIMPLE_SUSPEND,
-       },
-       {
-               /*
-                * This Kingston E8FK11.T firmware version has no interrupt
-                * after resume with actions related to suspend to idle
-                * https://bugzilla.kernel.org/show_bug.cgi?id=204887
-                */
-               .vid = 0x2646,
-               .fr = "E8FK11.T",
-               .quirks = NVME_QUIRK_SIMPLE_SUSPEND,
        }
 };
 
index a304f5ea11b90b2cffe1b2eec9cc605dc14b1d34..77c1428cd9452ae67f4325c41a512b6d6aaab229 100644 (file)
@@ -52,7 +52,7 @@ config PCI_MSI
           If you don't know what to do here, say Y.
 
 config PCI_MSI_IRQ_DOMAIN
-       def_bool ARC || ARM || ARM64 || X86 || RISCV
+       def_bool y
        depends on PCI_MSI
        select GENERIC_MSI_IRQ_DOMAIN
 
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);
index adff14fcb8e43ce74b6872a6a4b726af0fc8e799..ddfee1bd9dc158fefd776e5648c33f65742dce7d 100644 (file)
@@ -4,4 +4,5 @@
 # (This file is not included when SRCARCH=um since UML borrows several
 # asm headers from the host architecutre.)
 
+mandatory-y += msi.h
 mandatory-y += simd.h
index 9dc5bee14ae90301d46f7a651dcc593bdc9315e1..1c497a8b19bad3d63181ec7aac8a70b906d532f5 100644 (file)
@@ -1454,7 +1454,6 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
 void pci_free_irq_vectors(struct pci_dev *dev);
 int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
 const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, int vec);
-int pci_irq_get_node(struct pci_dev *pdev, int vec);
 
 #else
 static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; }
@@ -1497,11 +1496,6 @@ static inline const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev,
 {
        return cpu_possible_mask;
 }
-
-static inline int pci_irq_get_node(struct pci_dev *pdev, int vec)
-{
-       return first_online_node;
-}
 #endif
 
 /**