ARC: [SMP] Fix IPI IRQ registration
Handle it just like timer. Current request_percpu_irq() would fail on non-boot cpus and thus IRQ will remian unmasked on those cpus. [vgupta: fix changelong] Signed-off-by: Noam Camus <noamc@ezchip.com> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
This commit is contained in:
parent
a4b6cb735b
commit
7e5122190b
1 changed files with 13 additions and 2 deletions
|
@ -337,8 +337,19 @@ irqreturn_t do_IPI(int irq, void *dev_id)
|
||||||
* API called by platform code to hookup arch-common ISR to their IPI IRQ
|
* API called by platform code to hookup arch-common ISR to their IPI IRQ
|
||||||
*/
|
*/
|
||||||
static DEFINE_PER_CPU(int, ipi_dev);
|
static DEFINE_PER_CPU(int, ipi_dev);
|
||||||
|
|
||||||
|
static struct irqaction arc_ipi_irq = {
|
||||||
|
.name = "IPI Interrupt",
|
||||||
|
.flags = IRQF_PERCPU,
|
||||||
|
.handler = do_IPI,
|
||||||
|
};
|
||||||
|
|
||||||
int smp_ipi_irq_setup(int cpu, int irq)
|
int smp_ipi_irq_setup(int cpu, int irq)
|
||||||
{
|
{
|
||||||
int *dev_id = &per_cpu(ipi_dev, smp_processor_id());
|
if (!cpu)
|
||||||
return request_percpu_irq(irq, do_IPI, "IPI Interrupt", dev_id);
|
return setup_irq(irq, &arc_ipi_irq);
|
||||||
|
else
|
||||||
|
arch_unmask_irq(irq);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue