This patchset addresses a regression found with the Orion GPIO controller when both Edge- and Level- based interrupts are requested within the same GPIO chip. The regression was introduced by e59347a "arm: orion: Use generic irq chip" thereby affecting all kernel releases since 3.0.x. The reason behind it is that the Orion GPIO controller uses separate mask registers for the two types of interrupts (one for edge and one for level), whereas in other cases the same register would be shared. Since this mask register is cached, we need to have (potentially) separate register caches. We do that by adding a per-chip-type mask register cache, and a mask cache pointer (which will point either to that or the shared one). So we proceed with incremental stages: a) we introduce the new fields and pointer (though only the shared one is used) b) we convert all drivers to use it c) we rename the field so to force the use of the per-ct pointer d) we add per-ct mask cache, provided the new flag IRQ_GC_SEPARATE_MASK_REGISTERS is enabled e) we enable the flag for orion-gpio and mvebu drivers The changes were tested by Simon Guinot to be effective on Kirkwood chipsets, on both the legacy orion-gpio and the new gpio-mvebu drivers. The bug should also affect the other two Marvell variants handled by the gpio-mvebu driver. Changes from v3: cover letter and SOB lines. Gerlando Falauto (9): genirq: cosmetic: remove cur_regs genirq: add mask_cache and pmask_cache into struct irq_chip_type gpio: mvebu: convert to usage of *pmask_cache within irq_chip_type MIPS: JZ4740: convert to usage of *pmask_cache within irq_chip_type ARM: SAMSUNG: convert to usage of *pmask_cache within irq_chip_type genirq: rename mask_cache to shared_mask_cache genirq: handle separate mask registers orion-gpio: enable IRQ_GC_SEPARATE_MASK_REGISTERS gpio: mvebu: enable IRQ_GC_SEPARATE_MASK_REGISTERS arch/arm/plat-orion/gpio.c | 3 +- arch/arm/plat-samsung/irq-vic-timer.c | 6 ++-- arch/mips/jz4740/irq.c | 3 +- drivers/gpio/gpio-mvebu.c | 23 ++++++++------ include/linux/irq.h | 9 ++++-- kernel/irq/generic-chip.c | 55 +++++++++++++++++++++------------ 6 files changed, 64 insertions(+), 35 deletions(-) -- 1.7.10.1 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html