x86/microcode/intel: Cleanup code further
authorThomas Gleixner <tglx@linutronix.de>
Mon, 2 Oct 2023 11:59:41 +0000 (13:59 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Thu, 19 Oct 2023 12:10:50 +0000 (14:10 +0200)
Sanitize the microcode scan loop, fixup printks and move the loading
function for builtin microcode next to the place where it is used and mark
it __init.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20231002115902.389400871@linutronix.de
arch/x86/kernel/cpu/microcode/intel.c

index 9463b148e1c630177021f0d9f3f8eb570a2b425a..d6ff6ebc624b9d425f0c3d0e2a600395899f137a 100644 (file)
@@ -36,7 +36,7 @@ static const char ucode_path[] = "kernel/x86/microcode/GenuineIntel.bin";
 static struct microcode_intel *intel_ucode_patch __read_mostly;
 
 /* last level cache size per core */
-static int llc_size_per_core __ro_after_init;
+static unsigned int llc_size_per_core __ro_after_init;
 
 /* microcode format is extended from prescott processors */
 struct extended_signature {
@@ -294,29 +294,6 @@ static struct microcode_intel *scan_microcode(void *data, size_t size,
        return patch;
 }
 
-static bool load_builtin_intel_microcode(struct cpio_data *cp)
-{
-       unsigned int eax = 1, ebx, ecx = 0, edx;
-       struct firmware fw;
-       char name[30];
-
-       if (IS_ENABLED(CONFIG_X86_32))
-               return false;
-
-       native_cpuid(&eax, &ebx, &ecx, &edx);
-
-       sprintf(name, "intel-ucode/%02x-%02x-%02x",
-                     x86_family(eax), x86_model(eax), x86_stepping(eax));
-
-       if (firmware_request_builtin(&fw, name)) {
-               cp->size = fw.size;
-               cp->data = (void *)fw.data;
-               return true;
-       }
-
-       return false;
-}
-
 static int apply_microcode_early(struct ucode_cpu_info *uci)
 {
        struct microcode_intel *mc;
@@ -360,6 +337,28 @@ static int apply_microcode_early(struct ucode_cpu_info *uci)
        return 0;
 }
 
+static bool load_builtin_intel_microcode(struct cpio_data *cp)
+{
+       unsigned int eax = 1, ebx, ecx = 0, edx;
+       struct firmware fw;
+       char name[30];
+
+       if (IS_ENABLED(CONFIG_X86_32))
+               return false;
+
+       native_cpuid(&eax, &ebx, &ecx, &edx);
+
+       sprintf(name, "intel-ucode/%02x-%02x-%02x",
+               x86_family(eax), x86_model(eax), x86_stepping(eax));
+
+       if (firmware_request_builtin(&fw, name)) {
+               cp->size = fw.size;
+               cp->data = (void *)fw.data;
+               return true;
+       }
+       return false;
+}
+
 int __init save_microcode_in_initrd_intel(void)
 {
        struct ucode_cpu_info uci;
@@ -432,25 +431,16 @@ void load_ucode_intel_ap(void)
        apply_microcode_early(&uci);
 }
 
-/* Accessor for microcode pointer */
-static struct microcode_intel *ucode_get_patch(void)
-{
-       return intel_ucode_patch;
-}
-
 void reload_ucode_intel(void)
 {
-       struct microcode_intel *p;
        struct ucode_cpu_info uci;
 
        intel_cpu_collect_info(&uci);
 
-       p = ucode_get_patch();
-       if (!p)
+       uci.mc = intel_ucode_patch;
+       if (!uci.mc)
                return;
 
-       uci.mc = p;
-
        apply_microcode_early(&uci);
 }
 
@@ -488,8 +478,7 @@ static enum ucode_state apply_microcode_intel(int cpu)
        if (WARN_ON(raw_smp_processor_id() != cpu))
                return UCODE_ERROR;
 
-       /* Look for a newer patch in our cache: */
-       mc = ucode_get_patch();
+       mc = intel_ucode_patch;
        if (!mc) {
                mc = uci->mc;
                if (!mc)
@@ -680,18 +669,17 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device)
 }
 
 static struct microcode_ops microcode_intel_ops = {
-       .request_microcode_fw             = request_microcode_fw,
-       .collect_cpu_info                 = collect_cpu_info,
-       .apply_microcode                  = apply_microcode_intel,
+       .request_microcode_fw   = request_microcode_fw,
+       .collect_cpu_info       = collect_cpu_info,
+       .apply_microcode        = apply_microcode_intel,
 };
 
-static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
+static __init void calc_llc_size_per_core(struct cpuinfo_x86 *c)
 {
        u64 llc_size = c->x86_cache_size * 1024ULL;
 
        do_div(llc_size, c->x86_max_cores);
-
-       return (int)llc_size;
+       llc_size_per_core = (unsigned int)llc_size;
 }
 
 struct microcode_ops * __init init_intel_microcode(void)
@@ -704,7 +692,7 @@ struct microcode_ops * __init init_intel_microcode(void)
                return NULL;
        }
 
-       llc_size_per_core = calc_llc_size_per_core(c);
+       calc_llc_size_per_core(c);
 
        return &microcode_intel_ops;
 }