diff options
Diffstat (limited to 'drivers/irqchip/irq-gic.c')
-rw-r--r-- | drivers/irqchip/irq-gic.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 50b9ca69e6a2..7e5c33834d80 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -337,6 +337,17 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val, return IRQ_SET_MASK_OK_DONE; } + +void gic_set_cpu(unsigned int cpu, unsigned int irq) +{ + struct irq_data *d = irq_get_irq_data(irq); + struct cpumask mask; + + cpumask_clear(&mask); + cpumask_set_cpu(cpu, &mask); + gic_set_affinity(d, &mask, true); +} +EXPORT_SYMBOL(gic_set_cpu); #endif static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) @@ -787,18 +798,19 @@ static int gic_pm_init(struct gic_chip_data *gic) #endif #ifdef CONFIG_SMP -static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) +void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) { int cpu; unsigned long flags, map = 0; +#if 0 if (unlikely(nr_cpu_ids == 1)) { /* Only one CPU? let's do a self-IPI... */ writel_relaxed(2 << 24 | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT); return; } - +#endif gic_lock_irqsave(flags); /* Convert our logical CPU mask into a physical one. */ @@ -816,6 +828,7 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) gic_unlock_irqrestore(flags); } +EXPORT_SYMBOL(gic_raise_softirq); #endif #ifdef CONFIG_BL_SWITCHER |