diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-04 15:25:34 (GMT) |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-04 15:25:34 (GMT) |
commit | 7e935c7ca1e6c398f11edac5beabfc4348e3b3a4 (patch) | |
tree | 86da864ba6341bd86b5f5450c611f918722237b2 /arch/arc/kernel/intc-arcv2.c | |
parent | c62432b40b5e03c25faf2c8f8547bba4908b8945 (diff) | |
parent | e9d408e107db9a554b36c3a79f67b37dd3e16da0 (diff) | |
download | linux-7e935c7ca1e6c398f11edac5beabfc4348e3b3a4.tar.xz |
Merge branch 'memdup_user_nul' into work.misc
Diffstat (limited to 'arch/arc/kernel/intc-arcv2.c')
-rw-r--r-- | arch/arc/kernel/intc-arcv2.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/arc/kernel/intc-arcv2.c b/arch/arc/kernel/intc-arcv2.c index 26c1568..0394f9f 100644 --- a/arch/arc/kernel/intc-arcv2.c +++ b/arch/arc/kernel/intc-arcv2.c @@ -106,10 +106,21 @@ static struct irq_chip arcv2_irq_chip = { static int arcv2_irq_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) { - if (irq == TIMER0_IRQ || irq == IPI_IRQ) + /* + * core intc IRQs [16, 23]: + * Statically assigned always private-per-core (Timers, WDT, IPI, PCT) + */ + if (hw < 24) { + /* + * A subsequent request_percpu_irq() fails if percpu_devid is + * not set. That in turns sets NOAUTOEN, meaning each core needs + * to call enable_percpu_irq() + */ + irq_set_percpu_devid(irq); irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_percpu_irq); - else + } else { irq_set_chip_and_handler(irq, &arcv2_irq_chip, handle_level_irq); + } return 0; } |