Re: [PATCH v4 0/5] ARM: at91: fix irq_pm_install_action WARNING

Boris Brezillon
2015-02-09T15:48:02Z

Hi Thomas,

Any chance this could go in the next kernel release ?
More and more people are complaining about this backtrace :-/.

Regards,

Boris

On Thu, 29 Jan 2015 11:33:35 +0100
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> Commit cab303be91dc47942bc25de33dc1140123540800 [1] introduced a WARN_ON
> test which triggers a WARNING backtrace on at91 platforms.
> While this WARN_ON is absolutely necessary to warn users that they should
> not mix request with and without IRQF_NO_SUSPEND flags on shared IRQs,
> there is no easy way to solve this issue on at91 platforms.
>
> The main reason is that the init timer is often using a shared irq line
> and thus request this irq with IRQF_NO_SUSPEND flag set, while other
> peripherals request the same irq line without this flag.
>
> As suggested by Thomas, the first 3 patches of this series add a dumb
> demultiplexer irqchip implementation.
> This demuxer registers to a source interrupt and then forwards all received
> interrupts to its children (it they are enabled).
>
> The last two patches rework at91 DTs and config to make use of this dumb
> demuxer implementation.
>
> Rob, I know you were not in favor of exposing this in the DT but we really
> need to quickly a solution: more and more people complain about this warning.
> If you see a better way to handle this case please share it.
>
> Best Regards,
>
> Boris
>
> Changes since v3:
> - replace dumb by virt
>
> Changes since v2:
> - removed unneeded dumb demux flags passed to irq_alloc_dumb_demux_chip
> - set nested lockdep class for all requested irqs
> - add some explanation to the DT binding doc
> - change the compatible string to clearly show that this chip is purely
> virtual
> - added dumb demuxer to all at91 impacted SoCs
>
> Changes since v1:
> - went for an dumb irq demuxer approach instead of trying to fix the
> current shared irq code
>
> Boris Brezillon (5):
> genirq: Authorize chained handlers to remain disabled when initialized
> irqchip: add virtual demultiplexer implementation
> irqchip: Add DT binding doc for the virtual irq demuxer chip
> ARM: at91/dt: select VIRT_IRQ_DEMUX for all at91 SoCs
> ARM: at91/dt: define a virtual irq demultiplexer chip connected on
> irq1
>
> .../bindings/interrupt-controller/dumb-demux.txt | 41 ++++++
> arch/arm/boot/dts/at91rm9200.dtsi | 20 ++-
> arch/arm/boot/dts/at91sam9260.dtsi | 26 +++-
> arch/arm/boot/dts/at91sam9261.dtsi | 26 +++-
> arch/arm/boot/dts/at91sam9263.dtsi | 29 ++++-
> arch/arm/boot/dts/at91sam9g45.dtsi | 29 ++++-
> arch/arm/boot/dts/at91sam9n12.dtsi | 25 +++-
> arch/arm/boot/dts/at91sam9rl.dtsi | 29 ++++-
> arch/arm/boot/dts/at91sam9x5.dtsi | 26 +++-
> arch/arm/mach-at91/Kconfig | 2 +
> drivers/irqchip/Kconfig | 4 +
> drivers/irqchip/Makefile | 1 +
> drivers/irqchip/irq-virt-demux.c | 72 +++++++++++
> include/linux/irq.h | 64 +++++++++-
> include/linux/irqdomain.h | 1 +
> kernel/irq/Kconfig | 5 +
> kernel/irq/Makefile | 1 +
> kernel/irq/chip.c | 53 +++++++-
> kernel/irq/handle.c | 31 ++++-
> kernel/irq/internals.h | 3 +
> kernel/irq/irqdomain.c | 2 +-
> kernel/irq/msi.c | 3 +-
> kernel/irq/virt-demux-chip.c | 140 +++++++++++++++++++++
> 23 files changed, 580 insertions(+), 53 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/interrupt-controller/dumb-demux.txt
> create mode 100644 drivers/irqchip/irq-virt-demux.c
> create mode 100644 kernel/irq/virt-demux-chip.c
>

--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering