]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/microcode/AMD: Clean the cache if update did not load microcode
authorBoris Ostrovsky <boris.ostrovsky@oracle.com>
Thu, 27 Mar 2025 23:05:03 +0000 (19:05 -0400)
committerBorislav Petkov (AMD) <bp@alien8.de>
Mon, 7 Apr 2025 12:46:56 +0000 (14:46 +0200)
If microcode did not get loaded there is no reason to keep it in the cache.
Moreover, if loading failed it will not be possible to load an earlier version
of microcode since the failed revision will always be selected from the cache
on the next reload attempt.

Since the failed revisions is not easily available at this point just clean the
whole cache. It will be rebuilt later if needed.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20250327230503.1850368-3-boris.ostrovsky@oracle.com
arch/x86/kernel/cpu/microcode/amd.c

index b61028cf5c8a3b3b4f7fc8099747d26f392df0c6..57bd61f9c69b89d6bd7eee2deb9a99427981212a 100644 (file)
@@ -1171,11 +1171,18 @@ static void microcode_fini_cpu_amd(int cpu)
        uci->mc = NULL;
 }
 
+static void finalize_late_load_amd(int result)
+{
+       if (result)
+               cleanup();
+}
+
 static struct microcode_ops microcode_amd_ops = {
        .request_microcode_fw   = request_microcode_amd,
        .collect_cpu_info       = collect_cpu_info_amd,
        .apply_microcode        = apply_microcode_amd,
        .microcode_fini_cpu     = microcode_fini_cpu_amd,
+       .finalize_late_load     = finalize_late_load_amd,
        .nmi_safe               = true,
 };