All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
	jason.andryuk@amd.com, christopher.w.clark@gmail.com,
	"Jan Beulich" <jbeulich@suse.com>,
	"Andrew Cooper" <andrew.cooper3@citrix.com>,
	"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH v4 19/44] x86/boot: use consumed boot module flag for microcode
Date: Fri, 30 Aug 2024 17:47:04 -0400	[thread overview]
Message-ID: <20240830214730.1621-20-dpsmith@apertussolutions.com> (raw)
In-Reply-To: <20240830214730.1621-1-dpsmith@apertussolutions.com>

To track if the microcode boot module was loaded, a copy of the boot module is
kept. The size element of this copy is set to zero as the indicator that the
microcode was loaded. A side effect is that the modules have to be rescanned to
find the boot module post-relocation, so the cache copy can be created.

Use the consumed boot module flag to track the loading of the microcode boot
module. This removes the need to manipulate the boot module size element, no
longer requiring the copy, thus allowing it to be replaced by a reference. As a
result it is no longer necessary to rescan the boot modules after relocation
has occurred.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/arch/x86/cpu/microcode/core.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/xen/arch/x86/cpu/microcode/core.c b/xen/arch/x86/cpu/microcode/core.c
index cedb03beea54..83dd8bbe9fb1 100644
--- a/xen/arch/x86/cpu/microcode/core.c
+++ b/xen/arch/x86/cpu/microcode/core.c
@@ -58,7 +58,7 @@
  */
 #define MICROCODE_UPDATE_TIMEOUT_US 1000000
 
-static struct boot_module __initdata ucode_mod;
+static struct boot_module __initdata *ucode_mod;
 static signed int __initdata ucode_mod_idx;
 static bool __initdata ucode_mod_forced;
 static unsigned int nr_cores;
@@ -210,7 +210,7 @@ static void __init microcode_grab_module(
          !__test_and_clear_bit(ucode_mod_idx, module_map) )
         goto scan;
     bi->mods[ucode_mod_idx].type = BOOTMOD_MICROCODE;
-    ucode_mod = bi->mods[ucode_mod_idx];
+    ucode_mod = &bi->mods[ucode_mod_idx];
 scan:
     if ( ucode_scan )
         microcode_scan_module(module_map, bi);
@@ -752,10 +752,10 @@ static int __init cf_check microcode_init(void)
         ucode_blob.size = 0;
         ucode_blob.data = NULL;
     }
-    else if ( ucode_mod.size )
+    else if ( ucode_mod && !(ucode_mod->flags & BOOTMOD_FLAG_X86_CONSUMED) )
     {
         bootstrap_map_bm(NULL);
-        ucode_mod.size = 0;
+        ucode_mod->flags |= BOOTMOD_FLAG_X86_CONSUMED;
     }
 
     return 0;
@@ -809,14 +809,14 @@ int __init microcode_init_cache(
     if ( !ucode_ops.apply_microcode )
         return -ENODEV;
 
-    if ( ucode_scan )
-        /* Need to rescan the modules because they might have been relocated */
+    /* Scan if microcode was not detected earlier */
+    if ( !ucode_mod )
         microcode_scan_module(module_map, bi);
 
-    if ( ucode_mod.size )
-        rc = early_update_cache(bootstrap_map_bm(&ucode_mod),
-                                ucode_mod.size);
-    else if ( ucode_blob.size )
+    if ( ucode_mod && !(ucode_mod->flags & BOOTMOD_FLAG_X86_CONSUMED) )
+        rc = early_update_cache(bootstrap_map_bm(ucode_mod),
+                                ucode_mod->size);
+    else if ( ucode_mod && ucode_blob.size )
         rc = early_update_cache(ucode_blob.data, ucode_blob.size);
 
     return rc;
@@ -834,10 +834,10 @@ static int __init early_microcode_update_cpu(void)
         len = ucode_blob.size;
         data = ucode_blob.data;
     }
-    else if ( ucode_mod.size )
+    else if ( ucode_mod && !(ucode_mod->flags & BOOTMOD_FLAG_X86_CONSUMED) )
     {
-        len = ucode_mod.size;
-        data = bootstrap_map_bm(&ucode_mod);
+        len = ucode_mod->size;
+        data = bootstrap_map_bm(ucode_mod);
     }
 
     if ( !data )
@@ -903,7 +903,7 @@ int __init early_microcode_init(unsigned long *module_map,
 
     microcode_grab_module(module_map, bi);
 
-    if ( ucode_mod.size || ucode_blob.size )
+    if ( ucode_mod || ucode_blob.size )
         rc = early_microcode_update_cpu();
 
     /*
-- 
2.30.2



  parent reply	other threads:[~2024-08-30 21:50 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-30 21:46 [PATCH v4 00/44] Boot modules for Hyperlaunch Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 01/44] x86/boot: move x86 boot module counting into a new boot_info struct Daniel P. Smith
2024-09-02 13:47   ` Alejandro Vallejo
2024-09-04  6:23     ` Jan Beulich
2024-09-26 14:21     ` Daniel P. Smith
2024-09-03 22:24   ` Andrew Cooper
2024-09-26 14:31     ` Daniel P. Smith
2024-09-03 22:35   ` Andrew Cooper
2024-09-26 14:51     ` Daniel P. Smith
2024-09-04  6:31   ` Jan Beulich
2024-09-26 14:53     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 02/44] x86/boot: move boot loader name to boot info Daniel P. Smith
2024-09-03 22:41   ` Andrew Cooper
2024-09-26 15:02     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 03/44] x86/boot: move cmdline " Daniel P. Smith
2024-09-03 23:04   ` Andrew Cooper
2024-09-26 15:41     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 04/44] x86/boot: move mmap info " Daniel P. Smith
2024-09-03 23:18   ` Andrew Cooper
2024-09-26 15:48     ` Daniel P. Smith
2024-09-04  6:26   ` Jan Beulich
2024-09-26 15:54     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 05/44] x86/boot: introduce struct boot_module Daniel P. Smith
2024-09-03 23:29   ` Andrew Cooper
2024-09-26 16:03     ` Daniel P. Smith
2024-09-04  6:33   ` Jan Beulich
2024-09-26 16:04     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 06/44] x86/boot: convert consider_modules to " Daniel P. Smith
2024-09-04  6:40   ` Jan Beulich
2024-09-04 10:41     ` Andrew Cooper
2024-09-26 16:15       ` Daniel P. Smith
2024-09-26 16:10     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 07/44] x86/boot: move headroom to boot modules Daniel P. Smith
2024-09-03 23:40   ` Andrew Cooper
2024-09-26 16:21     ` Daniel P. Smith
2024-09-04  6:45   ` Jan Beulich
2024-09-26 16:26     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 08/44] x86/boot: convert setup.c mod refs to early_mod Daniel P. Smith
2024-09-03 23:50   ` Andrew Cooper
2024-09-26 16:28     ` Daniel P. Smith
2024-09-04  6:47   ` Jan Beulich
2024-09-26 16:55     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 09/44] x86/boot: split bootstrap_map_addr() out of bootstrap_map() Daniel P. Smith
2024-09-04  6:49   ` Jan Beulich
2024-09-04 10:47     ` Andrew Cooper
2024-09-26 17:06       ` Daniel P. Smith
2024-09-26 17:04     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 10/44] x86/boot: introduce boot module types Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 11/44] x86/boot: introduce boot module flags Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 12/44] x86/boot: add start and size fields to struct boot_module Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 13/44] x86/boot: update struct boot_module on module relocation Daniel P. Smith
2024-09-03 23:48   ` Andrew Cooper
2024-09-26 17:08     ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 14/44] x86/boot: transition relocation calculations to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 15/44] x86/boot: introduce boot module interator Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 16/44] x86/boot: introduce consumed flag for struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 17/44] x86/boot: convert microcode loading to consume struct boot_info Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 18/44] x86/boot: convert late microcode loading to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` Daniel P. Smith [this message]
2024-08-30 21:47 ` [PATCH v4 20/44] x86/boot: convert xsm policy " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 21/44] x86/boot: convert ramdisk locating " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 22/44] x86/boot: remove module_map usage from microcode loading Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 23/44] x86/boot: remove module_map usage from xsm policy loading Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 24/44] x86/boot: remove module_map usage by ramdisk loading Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 25/44] x86/boot: convert create_dom0 to use boot info Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 26/44] x86/boot: convert construct_dom0 to use struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 27/44] x86/boot: relocate kextra into boot info Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 28/44] x86/boot: add cmdline to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 29/44] x86/boot: convert dom0_construct_pv image param " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 30/44] x86/boot: convert dom0_construct_pv initrd " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 31/44] x86/boot: convert dom0_construct_pvh " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 32/44] x86/boot: convert pvh_load_kernel " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 33/44] x86/boot: convert initial_images " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 34/44] x86/boot: drop the use of initial_images unit global Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 35/44] x86/boot: remove usage of mod_end by discard_initial_images Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 36/44] x86/boot: remove remaining early_mod references Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 37/44] x86/boot: remove early_mod from struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 38/44] x86/boot: introduce boot domain Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 39/44] x86/boot: introduce domid field to struct boot_domain Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 40/44] x86/boot: add cmdline " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 41/44] x86/boot: add struct domain " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 42/44] x86/boot: convert construct_dom0 " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 43/44] x86/boot: convert dom0_construct_pv " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 44/44] x86/boot: convert dom0_construct_pvh " Daniel P. Smith
2024-09-02 11:12 ` [PATCH v4 00/44] Boot modules for Hyperlaunch Daniel P. Smith

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240830214730.1621-20-dpsmith@apertussolutions.com \
    --to=dpsmith@apertussolutions.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=christopher.w.clark@gmail.com \
    --cc=jason.andryuk@amd.com \
    --cc=jbeulich@suse.com \
    --cc=roger.pau@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.