diff options
Diffstat (limited to 'arch/arm/kernel/irq.c')
| -rw-r--r-- | arch/arm/kernel/irq.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 7296f0416286..6874c7dca75a 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -104,6 +104,11 @@ static struct irq_desc bad_irq_desc = {  	.lock = __SPIN_LOCK_UNLOCKED(bad_irq_desc.lock),  }; +#ifdef CONFIG_CPUMASK_OFFSTACK +/* We are not allocating bad_irq_desc.affinity or .pending_mask */ +#error "ARM architecture does not support CONFIG_CPUMASK_OFFSTACK." +#endif +  /*   * do_IRQ handles all hardware IRQ's.  Decoded IRQs should not   * come via this function.  Instead, they should provide their @@ -161,7 +166,7 @@ void __init init_IRQ(void)  		irq_desc[irq].status |= IRQ_NOREQUEST | IRQ_NOPROBE;  #ifdef CONFIG_SMP -	bad_irq_desc.affinity = CPU_MASK_ALL; +	cpumask_setall(bad_irq_desc.affinity);  	bad_irq_desc.cpu = smp_processor_id();  #endif  	init_arch_irq(); @@ -191,15 +196,16 @@ void migrate_irqs(void)  		struct irq_desc *desc = irq_desc + i;  		if (desc->cpu == cpu) { -			unsigned int newcpu = any_online_cpu(desc->affinity); - -			if (newcpu == NR_CPUS) { +			unsigned int newcpu = cpumask_any_and(desc->affinity, +							      cpu_online_mask); +			if (newcpu >= nr_cpu_ids) {  				if (printk_ratelimit())  					printk(KERN_INFO "IRQ%u no longer affine to CPU%u\n",  					       i, cpu); -				cpus_setall(desc->affinity); -				newcpu = any_online_cpu(desc->affinity); +				cpumask_setall(desc->affinity); +				newcpu = cpumask_any_and(desc->affinity, +							 cpu_online_mask);  			}  			route_irq(desc, i, newcpu); |