From: Josh Poimboeuf Date: Fri, 10 Aug 2018 07:31:10 +0000 (+0100) Subject: x86/microcode: Allow late microcode loading with SMT disabled X-Git-Tag: v4.19~444^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=07d981ad4cf1e78361c6db1c28ee5ba105f96cc1;p=platform%2Fkernel%2Flinux-rpi3.git x86/microcode: Allow late microcode loading with SMT disabled The kernel unnecessarily prevents late microcode loading when SMT is disabled. It should be safe to allow it if all the primary threads are online. Signed-off-by: Josh Poimboeuf Acked-by: Borislav Petkov Signed-off-by: David Woodhouse --- diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c index 0828626..b9bc8a1 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c @@ -509,12 +509,20 @@ static struct platform_device *microcode_pdev; static int check_online_cpus(void) { - if (num_online_cpus() == num_present_cpus()) - return 0; + unsigned int cpu; - pr_err("Not all CPUs online, aborting microcode update.\n"); + /* + * Make sure all CPUs are online. It's fine for SMT to be disabled if + * all the primary threads are still online. + */ + for_each_present_cpu(cpu) { + if (topology_is_primary_thread(cpu) && !cpu_online(cpu)) { + pr_err("Not all CPUs online, aborting microcode update.\n"); + return -EINVAL; + } + } - return -EINVAL; + return 0; } static atomic_t late_cpus_in;