diff options
Diffstat (limited to 'arch/x86/kernel/irq_64.c')
| -rw-r--r-- | arch/x86/kernel/irq_64.c | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 977d8b43a0dd..acf8fbf8fbda 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c | |||
| @@ -62,64 +62,6 @@ bool handle_irq(unsigned irq, struct pt_regs *regs) | |||
| 62 | return true; | 62 | return true; |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 66 | /* A cpu has been removed from cpu_online_mask. Reset irq affinities. */ | ||
| 67 | void fixup_irqs(void) | ||
| 68 | { | ||
| 69 | unsigned int irq; | ||
| 70 | static int warned; | ||
| 71 | struct irq_desc *desc; | ||
| 72 | |||
| 73 | for_each_irq_desc(irq, desc) { | ||
| 74 | int break_affinity = 0; | ||
| 75 | int set_affinity = 1; | ||
| 76 | const struct cpumask *affinity; | ||
| 77 | |||
| 78 | if (!desc) | ||
| 79 | continue; | ||
| 80 | if (irq == 2) | ||
| 81 | continue; | ||
| 82 | |||
| 83 | /* interrupt's are disabled at this point */ | ||
| 84 | spin_lock(&desc->lock); | ||
| 85 | |||
| 86 | affinity = desc->affinity; | ||
| 87 | if (!irq_has_action(irq) || | ||
| 88 | cpumask_equal(affinity, cpu_online_mask)) { | ||
| 89 | spin_unlock(&desc->lock); | ||
| 90 | continue; | ||
| 91 | } | ||
| 92 | |||
| 93 | if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) { | ||
| 94 | break_affinity = 1; | ||
| 95 | affinity = cpu_all_mask; | ||
| 96 | } | ||
| 97 | |||
| 98 | if (desc->chip->mask) | ||
| 99 | desc->chip->mask(irq); | ||
| 100 | |||
| 101 | if (desc->chip->set_affinity) | ||
| 102 | desc->chip->set_affinity(irq, affinity); | ||
| 103 | else if (!(warned++)) | ||
| 104 | set_affinity = 0; | ||
| 105 | |||
| 106 | if (desc->chip->unmask) | ||
| 107 | desc->chip->unmask(irq); | ||
| 108 | |||
| 109 | spin_unlock(&desc->lock); | ||
| 110 | |||
| 111 | if (break_affinity && set_affinity) | ||
| 112 | printk("Broke affinity for irq %i\n", irq); | ||
| 113 | else if (!set_affinity) | ||
| 114 | printk("Cannot set affinity for irq %i\n", irq); | ||
| 115 | } | ||
| 116 | |||
| 117 | /* That doesn't seem sufficient. Give it 1ms. */ | ||
| 118 | local_irq_enable(); | ||
| 119 | mdelay(1); | ||
| 120 | local_irq_disable(); | ||
| 121 | } | ||
| 122 | #endif | ||
| 123 | 65 | ||
| 124 | extern void call_softirq(void); | 66 | extern void call_softirq(void); |
| 125 | 67 | ||
