aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/sh
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-07-01 18:19:35 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-07-01 18:19:35 -0400
commitd5fb82137b6cd39e67c4321f4f5ce9b03d4d04e6 (patch)
treeaadb6cd1b654c0b45759111af74f3e7fc7a13705 /drivers/sh
parent8fff77551a9215a725650263e30fa105acca95ab (diff)
parent93b6eb77b49064ed1de5726560a0849f3ebccc2c (diff)
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Thomas Gleixner: "This contains: - a series of fixes for interrupt drivers to prevent a potential race when installing a chained interrupt handler - a fix for cpumask pointer misuse - a fix for using the wrong interrupt number from struct irq_data - removal of unused code and outdated comments - a few new helper functions which allow us to cleanup the interrupt handling code further in 4.3 I decided against doing the cleanup at the end of this merge window and rather do the preparatory steps for 4.3, so we can run the final ABI change at the end of the 4.3 merge window with less risk" * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (26 commits) ARM/LPC32xx: Use irq not hwirq for __irq_set_handler_locked() genirq: Implement irq_set_handler_locked()/irq_set_chip_handler_name_locked() genirq: Introduce helper irq_desc_get_irq() genirq: Remove irq_node() genirq: Clean up outdated comments related to include/linux/irqdesc.h mn10300: Fix incorrect use of irq_data->affinity MIPS/ralink: Fix race in installing chained IRQ handler MIPS/pci: Fix race in installing chained IRQ handler MIPS/ath25: Fix race in installing chained IRQ handler MIPS/ath25: Fix race in installing chained IRQ handler m68k/psc: Fix race in installing chained IRQ handler avr32/at32ap: Fix race in installing chained IRQ handler sh/intc: Fix race in installing chained IRQ handler sh/intc: Fix potential race in installing chained IRQ handler pinctrl/sun4i: Fix race in installing chained IRQ handler pinctrl/samsung: Fix race in installing chained IRQ handler pinctrl/samsung: Fix race in installing chained IRQ handler pinctrl/exynos: Fix race in installing chained IRQ handler pinctrl/st: Fix race in installing chained IRQ handler pinctrl/adi2: Fix race in installing chained IRQ handler ...
Diffstat (limited to 'drivers/sh')
-rw-r--r--drivers/sh/intc/core.c5
-rw-r--r--drivers/sh/intc/virq.c3
2 files changed, 5 insertions, 3 deletions
diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
index 81f22980b2de..156b790072b4 100644
--- a/drivers/sh/intc/core.c
+++ b/drivers/sh/intc/core.c
@@ -366,8 +366,9 @@ int __init register_intc_controller(struct intc_desc *desc)
366 366
367 /* redirect this interrupts to the first one */ 367 /* redirect this interrupts to the first one */
368 irq_set_chip(irq2, &dummy_irq_chip); 368 irq_set_chip(irq2, &dummy_irq_chip);
369 irq_set_chained_handler(irq2, intc_redirect_irq); 369 irq_set_chained_handler_and_data(irq2,
370 irq_set_handler_data(irq2, (void *)irq); 370 intc_redirect_irq,
371 (void *)irq);
371 } 372 }
372 } 373 }
373 374
diff --git a/drivers/sh/intc/virq.c b/drivers/sh/intc/virq.c
index f30ac9354ff2..f5f1b821241a 100644
--- a/drivers/sh/intc/virq.c
+++ b/drivers/sh/intc/virq.c
@@ -243,8 +243,9 @@ restart:
243 */ 243 */
244 irq_set_nothread(irq); 244 irq_set_nothread(irq);
245 245
246 irq_set_chained_handler(entry->pirq, intc_virq_handler); 246 /* Set handler data before installing the handler */
247 add_virq_to_pirq(entry->pirq, irq); 247 add_virq_to_pirq(entry->pirq, irq);
248 irq_set_chained_handler(entry->pirq, intc_virq_handler);
248 249
249 radix_tree_tag_clear(&d->tree, entry->enum_id, 250 radix_tree_tag_clear(&d->tree, entry->enum_id,
250 INTC_TAG_VIRQ_NEEDS_ALLOC); 251 INTC_TAG_VIRQ_NEEDS_ALLOC);