Loading arch/arc/kernel/mcip.c +18 −1 Original line number Diff line number Diff line Loading @@ -218,11 +218,28 @@ static void idu_irq_unmask(struct irq_data *data) raw_spin_unlock_irqrestore(&mcip_lock, flags); } #ifdef CONFIG_SMP static int idu_irq_set_affinity(struct irq_data *d, const struct cpumask *cpumask, bool f) idu_irq_set_affinity(struct irq_data *data, const struct cpumask *cpumask, bool force) { unsigned long flags; cpumask_t online; /* errout if no online cpu per @cpumask */ if (!cpumask_and(&online, cpumask, cpu_online_mask)) return -EINVAL; raw_spin_lock_irqsave(&mcip_lock, flags); idu_set_dest(data->hwirq, cpumask_bits(&online)[0]); idu_set_mode(data->hwirq, IDU_M_TRIG_LEVEL, IDU_M_DISTRI_RR); raw_spin_unlock_irqrestore(&mcip_lock, flags); return IRQ_SET_MASK_OK; } #endif static struct irq_chip idu_irq_chip = { .name = "MCIP IDU Intc", Loading Loading
arch/arc/kernel/mcip.c +18 −1 Original line number Diff line number Diff line Loading @@ -218,11 +218,28 @@ static void idu_irq_unmask(struct irq_data *data) raw_spin_unlock_irqrestore(&mcip_lock, flags); } #ifdef CONFIG_SMP static int idu_irq_set_affinity(struct irq_data *d, const struct cpumask *cpumask, bool f) idu_irq_set_affinity(struct irq_data *data, const struct cpumask *cpumask, bool force) { unsigned long flags; cpumask_t online; /* errout if no online cpu per @cpumask */ if (!cpumask_and(&online, cpumask, cpu_online_mask)) return -EINVAL; raw_spin_lock_irqsave(&mcip_lock, flags); idu_set_dest(data->hwirq, cpumask_bits(&online)[0]); idu_set_mode(data->hwirq, IDU_M_TRIG_LEVEL, IDU_M_DISTRI_RR); raw_spin_unlock_irqrestore(&mcip_lock, flags); return IRQ_SET_MASK_OK; } #endif static struct irq_chip idu_irq_chip = { .name = "MCIP IDU Intc", Loading