aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/migration.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq/migration.c')
-rw-r--r--kernel/irq/migration.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c
index 90b920d3f52b..bd72329e630c 100644
--- a/kernel/irq/migration.c
+++ b/kernel/irq/migration.c
@@ -1,21 +1,9 @@
1 1
2#include <linux/irq.h> 2#include <linux/irq.h>
3 3
4void set_pending_irq(unsigned int irq, cpumask_t mask)
5{
6 struct irq_desc *desc = irq_to_desc(irq);
7 unsigned long flags;
8
9 spin_lock_irqsave(&desc->lock, flags);
10 desc->status |= IRQ_MOVE_PENDING;
11 desc->pending_mask = mask;
12 spin_unlock_irqrestore(&desc->lock, flags);
13}
14
15void move_masked_irq(int irq) 4void move_masked_irq(int irq)
16{ 5{
17 struct irq_desc *desc = irq_to_desc(irq); 6 struct irq_desc *desc = irq_to_desc(irq);
18 cpumask_t tmp;
19 7
20 if (likely(!(desc->status & IRQ_MOVE_PENDING))) 8 if (likely(!(desc->status & IRQ_MOVE_PENDING)))
21 return; 9 return;
@@ -30,7 +18,7 @@ void move_masked_irq(int irq)
30 18
31 desc->status &= ~IRQ_MOVE_PENDING; 19 desc->status &= ~IRQ_MOVE_PENDING;
32 20
33 if (unlikely(cpus_empty(desc->pending_mask))) 21 if (unlikely(cpumask_empty(&desc->pending_mask)))
34 return; 22 return;
35 23
36 if (!desc->chip->set_affinity) 24 if (!desc->chip->set_affinity)
@@ -38,8 +26,6 @@ void move_masked_irq(int irq)
38 26
39 assert_spin_locked(&desc->lock); 27 assert_spin_locked(&desc->lock);
40 28
41 cpus_and(tmp, desc->pending_mask, cpu_online_map);
42
43 /* 29 /*
44 * If there was a valid mask to work with, please 30 * If there was a valid mask to work with, please
45 * do the disable, re-program, enable sequence. 31 * do the disable, re-program, enable sequence.
@@ -52,10 +38,13 @@ void move_masked_irq(int irq)
52 * For correct operation this depends on the caller 38 * For correct operation this depends on the caller
53 * masking the irqs. 39 * masking the irqs.
54 */ 40 */
55 if (likely(!cpus_empty(tmp))) { 41 if (likely(cpumask_any_and(&desc->pending_mask, cpu_online_mask)
56 desc->chip->set_affinity(irq,tmp); 42 < nr_cpu_ids)) {
43 cpumask_and(&desc->affinity,
44 &desc->pending_mask, cpu_online_mask);
45 desc->chip->set_affinity(irq, &desc->affinity);
57 } 46 }
58 cpus_clear(desc->pending_mask); 47 cpumask_clear(&desc->pending_mask);
59} 48}
60 49
61void move_native_irq(int irq) 50void move_native_irq(int irq)