]> xenbits.xensource.com Git - xen.git/commitdiff
x86/ucode: Only rescan features on successful microcode load
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 19 Nov 2024 21:50:25 +0000 (21:50 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 21 Nov 2024 20:12:47 +0000 (20:12 +0000)
There's no point rescanning if we didn't load something new.  Take the
opportunity to make the comment a bit more concise.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/cpu/microcode/core.c

index 4811b5ffb11ce914fe3240d7cae14ffad78437ca..87283cff1de46b0557add0c5b91ebcecaf948ea7 100644 (file)
@@ -860,6 +860,10 @@ static int __init early_microcode_load(struct boot_info *bi)
 
     rc = ucode_ops.apply_microcode(patch, 0);
 
+    if ( rc == 0 )
+        /* Rescan CPUID/MSR features, which may have changed after a load. */
+        early_cpu_init(false);
+
  unmap:
     bootstrap_unmap();
 
@@ -869,7 +873,6 @@ static int __init early_microcode_load(struct boot_info *bi)
 int __init early_microcode_init(struct boot_info *bi)
 {
     const struct cpuinfo_x86 *c = &boot_cpu_data;
-    int rc = 0;
 
     switch ( c->x86_vendor )
     {
@@ -909,16 +912,5 @@ int __init early_microcode_init(struct boot_info *bi)
         return -ENODEV;
     }
 
-    rc = early_microcode_load(bi);
-
-    /*
-     * Some CPUID leaves and MSRs are only present after microcode updates
-     * on some processors. We take the chance here to make sure what little
-     * state we have already probed is re-probed in order to ensure we do
-     * not use stale values. tsx_init() in particular needs to have up to
-     * date MSR_ARCH_CAPS.
-     */
-    early_cpu_init(false);
-
-    return rc;
+    return early_microcode_load(bi);
 }