linux-stable/arch/arm/plat-orion
Evgeniy Dushistov 9ece8839b1 ARM: orion: Fix for certain sequence of request_irq can cause irq storm
The problem is that hardware handled by arm/plat-orion/gpio.c,
require ack for edge irq, and no ack for level irq.

The code handle this issue, by two "struct irq_chip_type" per
one "struct irq_chip_generic". For one "struct irq_chip_generic"
irq_ack pointer is setted, for another it is NULL.

But we have only one mask_cache per two "struct irq_chip_type".
So if we
1)unmask interrupt A for "edge type" trigger,
2)unmask interrupt B for "level type" trigger,
3)unmask interrupt C for "edge type",

we, because of usage of generic irq_gc_mask_clr_bit/irq_gc_mask_set_bit,
have hardware configured to trigger interrupt B on "edge type",
because of shared mask_cache. But kernel think that B is "level type",
so when interrupt B occur via "edge" reason, we don't ack it,
and B triggered again and again.

Signed-off-by: Evgeniy A. Dushistov <dushistov@mail.ru>
Link: https://lkml.kernel.org/r/20140726155659.GA22977@fifteen
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
2014-11-01 22:07:45 +00:00
..
include/plat ARM: orion: remove no longer needed gpio DT code 2014-04-26 19:45:28 +00:00
common.c dsa: Replace mii_bus with a generic host device 2014-09-15 17:24:20 -04:00
gpio.c ARM: orion: Fix for certain sequence of request_irq can cause irq storm 2014-11-01 22:07:45 +00:00
irq.c ARM: orion: remove no longer needed DT IRQ code 2014-04-26 19:45:26 +00:00
Makefile Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
mpp.c arm: plat-orion: fix printing of "MPP config unavailable on this hardware" 2013-01-23 14:37:52 +00:00
pcie.c arm: plat-orion: use mv_mbus_dram_info() in PCIe code 2013-03-17 18:03:44 +00:00
time.c ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00