x86/microcode/intel: Rework intel_cpu_collect_info()
authorThomas Gleixner <tglx@linutronix.de>
Tue, 17 Oct 2023 21:23:45 +0000 (23:23 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 24 Oct 2023 13:05:53 +0000 (15:05 +0200)
Nothing needs struct ucode_cpu_info. Make it take struct cpu_signature,
let it return a boolean and simplify the implementation. Rename it now
that the silly name clash with collect_cpu_info() is gone.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20231017211722.851573238@linutronix.de
arch/x86/include/asm/cpu.h
arch/x86/kernel/cpu/microcode/intel.c
drivers/platform/x86/intel/ifs/load.c

index 25050d9..068a07e 100644 (file)
@@ -71,9 +71,9 @@ static inline void init_ia32_feat_ctl(struct cpuinfo_x86 *c) {}
 
 extern __noendbr void cet_disable(void);
 
-struct ucode_cpu_info;
+struct cpu_signature;
 
-int intel_cpu_collect_info(struct ucode_cpu_info *uci);
+void intel_collect_cpu_info(struct cpu_signature *sig);
 
 static inline bool intel_cpu_signatures_match(unsigned int s1, unsigned int p1,
                                              unsigned int s2, unsigned int p2)
index 4235c95..5aa7f5e 100644 (file)
@@ -68,36 +68,21 @@ static inline unsigned int exttable_size(struct extended_sigtable *et)
        return et->count * EXT_SIGNATURE_SIZE + EXT_HEADER_SIZE;
 }
 
-int intel_cpu_collect_info(struct ucode_cpu_info *uci)
+void intel_collect_cpu_info(struct cpu_signature *sig)
 {
-       unsigned int val[2];
-       unsigned int family, model;
-       struct cpu_signature csig = { 0 };
-       unsigned int eax, ebx, ecx, edx;
-
-       memset(uci, 0, sizeof(*uci));
-
-       eax = 0x00000001;
-       ecx = 0;
-       native_cpuid(&eax, &ebx, &ecx, &edx);
-       csig.sig = eax;
+       sig->sig = cpuid_eax(1);
+       sig->pf = 0;
+       sig->rev = intel_get_microcode_revision();
 
-       family = x86_family(eax);
-       model  = x86_model(eax);
+       if (x86_model(sig->sig) >= 5 || x86_family(sig->sig) > 6) {
+               unsigned int val[2];
 
-       if (model >= 5 || family > 6) {
                /* get processor flags from MSR 0x17 */
                native_rdmsr(MSR_IA32_PLATFORM_ID, val[0], val[1]);
-               csig.pf = 1 << ((val[1] >> 18) & 7);
+               sig->pf = 1 << ((val[1] >> 18) & 7);
        }
-
-       csig.rev = intel_get_microcode_revision();
-
-       uci->cpu_sig = csig;
-
-       return 0;
 }
-EXPORT_SYMBOL_GPL(intel_cpu_collect_info);
+EXPORT_SYMBOL_GPL(intel_collect_cpu_info);
 
 /*
  * Returns 1 if update has been found, 0 otherwise.
@@ -391,7 +376,7 @@ static __init struct microcode_intel *get_microcode_blob(struct ucode_cpu_info *
        if (!(cp.data && cp.size))
                return NULL;
 
-       intel_cpu_collect_info(uci);
+       intel_collect_cpu_info(&uci->cpu_sig);
 
        return scan_microcode(cp.data, cp.size, uci, save);
 }
index cefd0d8..61174bd 100644 (file)
@@ -227,7 +227,7 @@ out:
 
 static int image_sanity_check(struct device *dev, const struct microcode_header_intel *data)
 {
-       struct ucode_cpu_info uci;
+       struct cpu_signature sig;
 
        /* Provide a specific error message when loading an older/unsupported image */
        if (data->hdrver != MC_HEADER_TYPE_IFS) {
@@ -240,11 +240,9 @@ static int image_sanity_check(struct device *dev, const struct microcode_header_
                return -EINVAL;
        }
 
-       intel_cpu_collect_info(&uci);
+       intel_collect_cpu_info(&sig);
 
-       if (!intel_find_matching_signature((void *)data,
-                                          uci.cpu_sig.sig,
-                                          uci.cpu_sig.pf)) {
+       if (!intel_find_matching_signature((void *)data, sig.sig, sig.pf)) {
                dev_err(dev, "cpu signature, processor flags not matching\n");
                return -EINVAL;
        }