|
@@ -43,12 +43,16 @@ void irq_move_masked_irq(struct irq_data *idata)
|
|
|
* masking the irqs.
|
|
|
*/
|
|
|
if (likely(cpumask_any_and(desc->pending_mask, cpu_online_mask)
|
|
|
- < nr_cpu_ids))
|
|
|
- if (!chip->irq_set_affinity(&desc->irq_data,
|
|
|
- desc->pending_mask, false)) {
|
|
|
+ < nr_cpu_ids)) {
|
|
|
+ int ret = chip->irq_set_affinity(&desc->irq_data,
|
|
|
+ desc->pending_mask, false);
|
|
|
+ switch (ret) {
|
|
|
+ case IRQ_SET_MASK_OK:
|
|
|
cpumask_copy(desc->irq_data.affinity, desc->pending_mask);
|
|
|
+ case IRQ_SET_MASK_OK_NOCOPY:
|
|
|
irq_set_thread_affinity(desc);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
cpumask_clear(desc->pending_mask);
|
|
|
}
|