|
@@ -2262,34 +2262,32 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
|
|
|
unsigned int cpu = (unsigned long)hcpu;
|
|
|
struct timer_list *t = &per_cpu(mce_timer, cpu);
|
|
|
|
|
|
- switch (action) {
|
|
|
+ switch (action & ~CPU_TASKS_FROZEN) {
|
|
|
case CPU_ONLINE:
|
|
|
- case CPU_ONLINE_FROZEN:
|
|
|
mce_device_create(cpu);
|
|
|
if (threshold_cpu_callback)
|
|
|
threshold_cpu_callback(action, cpu);
|
|
|
break;
|
|
|
case CPU_DEAD:
|
|
|
- case CPU_DEAD_FROZEN:
|
|
|
if (threshold_cpu_callback)
|
|
|
threshold_cpu_callback(action, cpu);
|
|
|
mce_device_remove(cpu);
|
|
|
break;
|
|
|
case CPU_DOWN_PREPARE:
|
|
|
- case CPU_DOWN_PREPARE_FROZEN:
|
|
|
del_timer_sync(t);
|
|
|
smp_call_function_single(cpu, mce_disable_cpu, &action, 1);
|
|
|
break;
|
|
|
case CPU_DOWN_FAILED:
|
|
|
- case CPU_DOWN_FAILED_FROZEN:
|
|
|
smp_call_function_single(cpu, mce_reenable_cpu, &action, 1);
|
|
|
mce_start_timer(cpu, t);
|
|
|
break;
|
|
|
- case CPU_POST_DEAD:
|
|
|
+ }
|
|
|
+
|
|
|
+ if (action == CPU_POST_DEAD) {
|
|
|
/* intentionally ignoring frozen here */
|
|
|
cmci_rediscover(cpu);
|
|
|
- break;
|
|
|
}
|
|
|
+
|
|
|
return NOTIFY_OK;
|
|
|
}
|
|
|
|