kernel/kernel-3.0.8-suspend_fix_firmware_task_freezing_feature.patch

22 lines
852 B
Diff

diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c
index f924280..cd7ef2f 100644
--- a/arch/x86/kernel/microcode_core.c
+++ b/arch/x86/kernel/microcode_core.c
@@ -483,7 +483,15 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu)
sysfs_remove_group(&sys_dev->kobj, &mc_attr_group);
pr_debug("CPU%d removed\n", cpu);
break;
- case CPU_DEAD:
+
+ /*
+ * Do not invalidate the microcode if a CPU goes offline,
+ * because it would be impossible to get the microcode again
+ * from userspace when the CPU comes back up, if the userspace
+ * happens to be frozen at that moment by the freezer subsystem,
+ * for example, due to a suspend operation in progress.
+ */
+
case CPU_UP_CANCELED_FROZEN:
/* The CPU refused to come up during a system resume */
microcode_fini_cpu(cpu);