x86, microcode: Don't request microcode from userspace unnecessarily
authorSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Sun, 9 Oct 2011 19:42:00 +0000 (15:42 -0400)
committerBorislav Petkov <borislav.petkov@amd.com>
Thu, 13 Oct 2011 14:20:35 +0000 (16:20 +0200)
Requesting the microcode from userspace *every time* when onlining CPUs
(during a CPU hotplug operation) is unnecessary. Thus, ensure that
once the kernel gets the microcode after booting, it is not freed nor
invalidated when a CPU goes offline, so that it can be reused when that
CPU comes back online, without requesting userspace for it again. As a
result, the CPU hotplug operations become faster as well.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Andreas Herrmann <andreas.herrmann3@amd.com>
Link: http://lkml.kernel.org/r/4E91F908.5010006@linux.vnet.ibm.com
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
arch/x86/kernel/microcode_core.c

index f9242800bc84073cbb284fc3c6bb0fbe0c2e7f12..f2d2a664e7975acace35742dc7bf3fe3446c2aeb 100644 (file)
@@ -483,7 +483,13 @@ 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:
+
+       /*
+        * When a CPU goes offline, don't free up or invalidate the copy of
+        * the microcode in kernel memory, so that we can reuse it when the
+        * CPU comes back online without unnecessarily requesting the userspace
+        * for it again.
+        */
        case CPU_UP_CANCELED_FROZEN:
                /* The CPU refused to come up during a system resume */
                microcode_fini_cpu(cpu);