diff options
Diffstat (limited to 'kernel/irq/migration.c')
| -rw-r--r-- | kernel/irq/migration.c | 25 |
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 | ||
| 4 | void 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 | |||
| 15 | void move_masked_irq(int irq) | 4 | void 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 | ||
| 61 | void move_native_irq(int irq) | 50 | void move_native_irq(int irq) |
