aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 591c927b135c..ade65bfb466d 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -256,6 +256,8 @@ EXPORT_SYMBOL_GPL(irq_set_affinity_notifier);
256 */ 256 */
257static int setup_affinity(unsigned int irq, struct irq_desc *desc) 257static int setup_affinity(unsigned int irq, struct irq_desc *desc)
258{ 258{
259 struct cpumask *set = irq_default_affinity;
260
259 /* Excludes PER_CPU and NO_BALANCE interrupts */ 261 /* Excludes PER_CPU and NO_BALANCE interrupts */
260 if (!irq_can_set_affinity(irq)) 262 if (!irq_can_set_affinity(irq))
261 return 0; 263 return 0;
@@ -265,15 +267,13 @@ static int setup_affinity(unsigned int irq, struct irq_desc *desc)
265 * one of the targets is online. 267 * one of the targets is online.
266 */ 268 */
267 if (desc->status & (IRQ_AFFINITY_SET)) { 269 if (desc->status & (IRQ_AFFINITY_SET)) {
268 if (cpumask_any_and(desc->irq_data.affinity, cpu_online_mask) 270 if (cpumask_intersects(desc->irq_data.affinity,
269 < nr_cpu_ids) 271 cpu_online_mask))
270 goto set_affinity; 272 set = desc->irq_data.affinity;
271 else 273 else
272 desc->status &= ~IRQ_AFFINITY_SET; 274 desc->status &= ~IRQ_AFFINITY_SET;
273 } 275 }
274 276 cpumask_and(desc->irq_data.affinity, cpu_online_mask, set);
275 cpumask_and(desc->irq_data.affinity, cpu_online_mask, irq_default_affinity);
276set_affinity:
277 desc->irq_data.chip->irq_set_affinity(&desc->irq_data, desc->irq_data.affinity, false); 277 desc->irq_data.chip->irq_set_affinity(&desc->irq_data, desc->irq_data.affinity, false);
278 278
279 return 0; 279 return 0;