diff options
Diffstat (limited to 'drivers/irqchip/irq-gic.c')
| -rw-r--r-- | drivers/irqchip/irq-gic.c | 14 | 
1 files changed, 3 insertions, 11 deletions
| diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 00de05abd3c3..c17fabd6741e 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -329,10 +329,8 @@ static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)  static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,  			    bool force)  { -	void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3); -	unsigned int cpu, shift = (gic_irq(d) % 4) * 8; -	u32 val, mask, bit; -	unsigned long flags; +	void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + gic_irq(d); +	unsigned int cpu;  	if (!force)  		cpu = cpumask_any_and(mask_val, cpu_online_mask); @@ -342,13 +340,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,  	if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)  		return -EINVAL; -	gic_lock_irqsave(flags); -	mask = 0xff << shift; -	bit = gic_cpu_map[cpu] << shift; -	val = readl_relaxed(reg) & ~mask; -	writel_relaxed(val | bit, reg); -	gic_unlock_irqrestore(flags); - +	writeb_relaxed(gic_cpu_map[cpu], reg);  	irq_data_update_effective_affinity(d, cpumask_of(cpu));  	return IRQ_SET_MASK_OK_DONE; |