diff options
Diffstat (limited to 'kernel/irq/migration.c')
| -rw-r--r-- | kernel/irq/migration.c | 14 | 
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c index 9db681d9581..bd72329e630 100644 --- a/kernel/irq/migration.c +++ b/kernel/irq/migration.c @@ -4,7 +4,6 @@  void move_masked_irq(int irq)  {  	struct irq_desc *desc = irq_to_desc(irq); -	cpumask_t tmp;  	if (likely(!(desc->status & IRQ_MOVE_PENDING)))  		return; @@ -19,7 +18,7 @@ void move_masked_irq(int irq)  	desc->status &= ~IRQ_MOVE_PENDING; -	if (unlikely(cpus_empty(desc->pending_mask))) +	if (unlikely(cpumask_empty(&desc->pending_mask)))  		return;  	if (!desc->chip->set_affinity) @@ -27,8 +26,6 @@ void move_masked_irq(int irq)  	assert_spin_locked(&desc->lock); -	cpus_and(tmp, desc->pending_mask, cpu_online_map); -  	/*  	 * If there was a valid mask to work with, please  	 * do the disable, re-program, enable sequence. @@ -41,10 +38,13 @@ void move_masked_irq(int irq)  	 * For correct operation this depends on the caller  	 * masking the irqs.  	 */ -	if (likely(!cpus_empty(tmp))) { -		desc->chip->set_affinity(irq,tmp); +	if (likely(cpumask_any_and(&desc->pending_mask, cpu_online_mask) +		   < nr_cpu_ids)) { +		cpumask_and(&desc->affinity, +			    &desc->pending_mask, cpu_online_mask); +		desc->chip->set_affinity(irq, &desc->affinity);  	} -	cpus_clear(desc->pending_mask); +	cpumask_clear(&desc->pending_mask);  }  void move_native_irq(int irq)  |