|
@@ -62,64 +62,6 @@ bool handle_irq(unsigned irq, struct pt_regs *regs)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_HOTPLUG_CPU
|
|
|
-/* A cpu has been removed from cpu_online_mask. Reset irq affinities. */
|
|
|
-void fixup_irqs(void)
|
|
|
-{
|
|
|
- unsigned int irq;
|
|
|
- static int warned;
|
|
|
- struct irq_desc *desc;
|
|
|
-
|
|
|
- for_each_irq_desc(irq, desc) {
|
|
|
- int break_affinity = 0;
|
|
|
- int set_affinity = 1;
|
|
|
- const struct cpumask *affinity;
|
|
|
-
|
|
|
- if (!desc)
|
|
|
- continue;
|
|
|
- if (irq == 2)
|
|
|
- continue;
|
|
|
-
|
|
|
- /* interrupt's are disabled at this point */
|
|
|
- spin_lock(&desc->lock);
|
|
|
-
|
|
|
- affinity = desc->affinity;
|
|
|
- if (!irq_has_action(irq) ||
|
|
|
- cpumask_equal(affinity, cpu_online_mask)) {
|
|
|
- spin_unlock(&desc->lock);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
|
|
|
- break_affinity = 1;
|
|
|
- affinity = cpu_all_mask;
|
|
|
- }
|
|
|
-
|
|
|
- if (desc->chip->mask)
|
|
|
- desc->chip->mask(irq);
|
|
|
-
|
|
|
- if (desc->chip->set_affinity)
|
|
|
- desc->chip->set_affinity(irq, affinity);
|
|
|
- else if (!(warned++))
|
|
|
- set_affinity = 0;
|
|
|
-
|
|
|
- if (desc->chip->unmask)
|
|
|
- desc->chip->unmask(irq);
|
|
|
-
|
|
|
- spin_unlock(&desc->lock);
|
|
|
-
|
|
|
- if (break_affinity && set_affinity)
|
|
|
- printk("Broke affinity for irq %i\n", irq);
|
|
|
- else if (!set_affinity)
|
|
|
- printk("Cannot set affinity for irq %i\n", irq);
|
|
|
- }
|
|
|
-
|
|
|
- /* That doesn't seem sufficient. Give it 1ms. */
|
|
|
- local_irq_enable();
|
|
|
- mdelay(1);
|
|
|
- local_irq_disable();
|
|
|
-}
|
|
|
-#endif
|
|
|
|
|
|
extern void call_softirq(void);
|
|
|
|