linux/drivers/pci/host
Grygorii Strashko ad53ae5958 PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD
commit 8ff0ef996c upstream.

On -RT and if kernel is booting with "threadirqs" cmd line parameter,
PCIe/PCI (MSI) IRQ cascade handlers (like dra7xx_pcie_msi_irq_handler())
will be forced threaded and, as result, will generate warnings like this:

  WARNING: CPU: 1 PID: 82 at kernel/irq/handle.c:150 handle_irq_event_percpu+0x14c/0x174()
  irq 460 handler irq_default_primary_handler+0x0/0x14 enabled interrupts
  Backtrace:
   (warn_slowpath_common) from (warn_slowpath_fmt+0x38/0x40)
   (warn_slowpath_fmt) from (handle_irq_event_percpu+0x14c/0x174)
   (handle_irq_event_percpu) from (handle_irq_event+0x84/0xb8)
   (handle_irq_event) from (handle_simple_irq+0x90/0x118)
   (handle_simple_irq) from (generic_handle_irq+0x30/0x44)
   (generic_handle_irq) from (dra7xx_pcie_msi_irq_handler+0x7c/0x8c)
   (dra7xx_pcie_msi_irq_handler) from (irq_forced_thread_fn+0x28/0x5c)
   (irq_forced_thread_fn) from (irq_thread+0x128/0x204)

This happens because all of them invoke generic_handle_irq() from the
requested handler.  generic_handle_irq() grabs raw_locks and thus needs to
run in raw-IRQ context.

This issue was originally reproduced on TI dra7-evem, but, as was
identified during discussion [1], other hosts can also suffer from this
issue.  Fix all them at once by marking PCIe/PCI (MSI) IRQ cascade handlers
IRQF_NO_THREAD explicitly.

[1] http://lkml.kernel.org/r/1448027966-21610-1-git-send-email-grygorii.strashko@ti.com

[bhelgaas: add stable tag, fix typos]
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Lucas Stach <l.stach@pengutronix.de>
CC: Kishon Vijay Abraham I <kishon@ti.com>
CC: Jingoo Han <jingoohan1@gmail.com>
CC: Kukjin Kim <kgene@kernel.org>
CC: Krzysztof Kozlowski <k.kozlowski@samsung.com>
CC: Richard Zhu <Richard.Zhu@freescale.com>
CC: Thierry Reding <thierry.reding@gmail.com>
CC: Stephen Warren <swarren@wwwdotorg.org>
CC: Alexandre Courbot <gnurou@gmail.com>
CC: Simon Horman <horms@verge.net.au>
CC: Pratyush Anand <pratyush.anand@gmail.com>
CC: Michal Simek <michal.simek@xilinx.com>
CC: "Sören Brinkmann" <soren.brinkmann@xilinx.com>
CC: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2016-02-17 12:30:56 -08:00
..
Kconfig PCI: dra7xx: Mark driver as broken 2016-01-08 09:58:31 -06:00
Makefile Merge branch 'pci/host-hisi' into next 2015-11-03 08:39:19 -06:00
pci-dra7xx.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00
pci-exynos.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00
pci-host-generic.c PCI: generic: Fix address window calculation for non-zero starting bus 2015-10-09 18:18:35 -05:00
pci-imx6.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00
pci-keystone-dw.c PCI: designware: Use of_pci_get_host_bridge_resources() to parse DT 2015-11-02 14:49:18 -06:00
pci-keystone.c genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
pci-keystone.h PCI: designware: Make get_msi_addr() return phys_addr_t, not u32 2015-09-18 13:58:35 -05:00
pci-layerscape.c PCI: layerscape: Add ls_pcie_msi_host_init() 2015-11-02 15:38:39 -06:00
pci-mvebu.c PCI: mvebu: Remove code restricting accesses to slot 0 2015-10-09 11:23:37 -05:00
pci-rcar-gen2.c PCI: rcar: Add R8A7794 support 2015-09-24 17:06:32 -05:00
pci-tegra.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00
pci-versatile.c Merge branches 'pci/host-exynos', 'pci/host-iproc', 'pci/host-keystone', 'pci/host-layerscape', 'pci/host-mvebu', 'pci/host-rcar' and 'pci/host-versatile' into next 2015-04-10 08:26:54 -05:00
pci-xgene-msi.c irqdomain/msi: Use fwnode instead of of_node 2015-10-13 19:01:25 +02:00
pci-xgene.c PCI/MSI: xgene: Remove msi_controller assignment 2015-09-25 18:24:28 -05:00
pcie-altera-msi.c PCI changes for the v4.4 merge window: 2015-11-06 11:29:53 -08:00
pcie-altera.c PCI: altera: Fix error when INTx is 4 2015-12-04 16:21:21 -06:00
pcie-designware.c PCI: designware: Remove incorrect io_base assignment 2015-11-24 14:06:41 -06:00
pcie-designware.h PCI: designware: Make driver arch-agnostic 2015-11-02 14:49:18 -06:00
pcie-hisi.c PCI: hisi: Fix hisi_pcie_cfg_read() 32-bit reads 2015-12-04 16:32:25 -06:00
pcie-iproc-bcma.c PCI: iproc: Free resource list after registration 2015-05-27 18:34:05 -05:00
pcie-iproc-platform.c PCI: iproc: Add outbound mapping support 2015-10-16 08:18:24 -05:00
pcie-iproc.c PCI: iproc: Fix header comment "Corporation" misspelling 2015-10-22 13:53:13 -05:00
pcie-iproc.h PCI: iproc: Add outbound mapping support 2015-10-16 08:18:24 -05:00
pcie-rcar.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00
pcie-spear13xx.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00
pcie-xilinx.c PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD 2016-02-17 12:30:56 -08:00