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,
	stefano.stabellini@amd.com, "Jan Beulich" <jbeulich@suse.com>,
	"Andrew Cooper" <andrew.cooper3@citrix.com>,
	"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH v5 17/44] x86/boot: convert microcode loading to consume struct boot_info
Date: Sun,  6 Oct 2024 17:49:28 -0400	[thread overview]
Message-ID: <20241006214956.24339-18-dpsmith@apertussolutions.com> (raw)
In-Reply-To: <20241006214956.24339-1-dpsmith@apertussolutions.com>

Convert the microcode loading functions to take struct boot_info, and then
using struct boot_module to map and check for microcode. To keep the changes
focused, continue using the struct mod to hold the reference to the microcode
that is used by the late microcode logic.

Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
 xen/arch/x86/cpu/microcode/core.c    | 37 +++++++++++++---------------
 xen/arch/x86/include/asm/bootinfo.h  |  1 +
 xen/arch/x86/include/asm/microcode.h | 14 ++++++-----
 xen/arch/x86/setup.c                 |  4 +--
 4 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/xen/arch/x86/cpu/microcode/core.c b/xen/arch/x86/cpu/microcode/core.c
index 8564e4d2c94c..22fea80bc97e 100644
--- a/xen/arch/x86/cpu/microcode/core.c
+++ b/xen/arch/x86/cpu/microcode/core.c
@@ -35,6 +35,7 @@
 #include <xen/watchdog.h>
 
 #include <asm/apic.h>
+#include <asm/bootinfo.h>
 #include <asm/cpu-policy.h>
 #include <asm/nmi.h>
 #include <asm/processor.h>
@@ -153,10 +154,8 @@ static int __init cf_check parse_ucode(const char *s)
 custom_param("ucode", parse_ucode);
 
 static void __init microcode_scan_module(
-    unsigned long *module_map,
-    const multiboot_info_t *mbi)
+    unsigned long *module_map, const struct boot_info *bi)
 {
-    module_t *mod = (module_t *)__va(mbi->mods_addr);
     uint64_t *_blob_start;
     unsigned long _blob_size;
     struct cpio_data cd;
@@ -178,16 +177,16 @@ static void __init microcode_scan_module(
     /*
      * Try all modules and see whichever could be the microcode blob.
      */
-    for ( i = 1 /* Ignore dom0 kernel */; i < mbi->mods_count; i++ )
+    for ( i = 1 /* Ignore dom0 kernel */; i < bi->nr_modules; i++ )
     {
         if ( !test_bit(i, module_map) )
             continue;
 
-        _blob_start = bootstrap_map(&mod[i]);
-        _blob_size = mod[i].mod_end;
+        _blob_start = bootstrap_map_bm(&bi->mods[i]);
+        _blob_size = bi->mods[i].size;
         if ( !_blob_start )
         {
-            printk("Could not map multiboot module #%d (size: %ld)\n",
+            printk("Could not map boot module #%d (size: %ld)\n",
                    i, _blob_size);
             continue;
         }
@@ -205,20 +204,18 @@ static void __init microcode_scan_module(
 }
 
 static void __init microcode_grab_module(
-    unsigned long *module_map,
-    const multiboot_info_t *mbi)
+    unsigned long *module_map, struct boot_info *bi)
 {
-    module_t *mod = (module_t *)__va(mbi->mods_addr);
-
     if ( ucode_mod_idx < 0 )
-        ucode_mod_idx += mbi->mods_count;
-    if ( ucode_mod_idx <= 0 || ucode_mod_idx >= mbi->mods_count ||
+        ucode_mod_idx += bi->nr_modules;
+    if ( ucode_mod_idx <= 0 || ucode_mod_idx >= bi->nr_modules ||
          !__test_and_clear_bit(ucode_mod_idx, module_map) )
         goto scan;
-    ucode_mod = mod[ucode_mod_idx];
+    bi->mods[ucode_mod_idx].type = BOOTMOD_MICROCODE;
+    ucode_mod = *bi->mods[ucode_mod_idx].mod;
 scan:
     if ( ucode_scan )
-        microcode_scan_module(module_map, mbi);
+        microcode_scan_module(module_map, bi);
 }
 
 static struct microcode_ops __ro_after_init ucode_ops;
@@ -822,8 +819,8 @@ static int __init early_update_cache(const void *data, size_t len)
     return rc;
 }
 
-int __init microcode_init_cache(unsigned long *module_map,
-                                const struct multiboot_info *mbi)
+int __init microcode_init_cache(
+    unsigned long *module_map, const struct boot_info *bi)
 {
     int rc = 0;
 
@@ -832,7 +829,7 @@ int __init microcode_init_cache(unsigned long *module_map,
 
     if ( ucode_scan )
         /* Need to rescan the modules because they might have been relocated */
-        microcode_scan_module(module_map, mbi);
+        microcode_scan_module(module_map, bi);
 
     if ( ucode_mod.mod_end )
         rc = early_update_cache(bootstrap_map(&ucode_mod),
@@ -879,7 +876,7 @@ static int __init early_microcode_update_cpu(void)
 }
 
 int __init early_microcode_init(unsigned long *module_map,
-                                const struct multiboot_info *mbi)
+                                struct boot_info *bi)
 {
     const struct cpuinfo_x86 *c = &boot_cpu_data;
     int rc = 0;
@@ -922,7 +919,7 @@ int __init early_microcode_init(unsigned long *module_map,
         return -ENODEV;
     }
 
-    microcode_grab_module(module_map, mbi);
+    microcode_grab_module(module_map, bi);
 
     if ( ucode_mod.mod_end || ucode_blob.size )
         rc = early_microcode_update_cpu();
diff --git a/xen/arch/x86/include/asm/bootinfo.h b/xen/arch/x86/include/asm/bootinfo.h
index 7833b065eff1..1ec29a423061 100644
--- a/xen/arch/x86/include/asm/bootinfo.h
+++ b/xen/arch/x86/include/asm/bootinfo.h
@@ -20,6 +20,7 @@ enum bootmod_type {
     BOOTMOD_XEN,
     BOOTMOD_KERNEL,
     BOOTMOD_RAMDISK,
+    BOOTMOD_MICROCODE,
 };
 
 struct boot_module {
diff --git a/xen/arch/x86/include/asm/microcode.h b/xen/arch/x86/include/asm/microcode.h
index 57c08205d475..495c8f7a7cc5 100644
--- a/xen/arch/x86/include/asm/microcode.h
+++ b/xen/arch/x86/include/asm/microcode.h
@@ -4,6 +4,8 @@
 #include <xen/types.h>
 #include <xen/percpu.h>
 
+#include <asm/bootinfo.h>
+
 #include <public/xen.h>
 
 struct multiboot_info;
@@ -22,12 +24,12 @@ struct cpu_signature {
 DECLARE_PER_CPU(struct cpu_signature, cpu_sig);
 
 void microcode_set_module(unsigned int idx);
-int microcode_update(XEN_GUEST_HANDLE(const_void) buf,
-                     unsigned long len, unsigned int flags);
-int early_microcode_init(unsigned long *module_map,
-                         const struct multiboot_info *mbi);
-int microcode_init_cache(unsigned long *module_map,
-                         const struct multiboot_info *mbi);
+int microcode_update(
+    XEN_GUEST_HANDLE(const_void) buf, unsigned long len, unsigned int flags);
+int early_microcode_init(
+    unsigned long *module_map, struct boot_info *bi);
+int microcode_init_cache(
+    unsigned long *module_map, const struct boot_info *bi);
 int microcode_update_one(void);
 
 #endif /* ASM_X86__MICROCODE_H */
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 235b4e41f653..48c509b62a4c 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1382,7 +1382,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
      * TODO: load ucode earlier once multiboot modules become accessible
      * at an earlier stage.
      */
-    early_microcode_init(module_map, mbi);
+    early_microcode_init(module_map, bi);
 
     if ( xen_phys_start )
     {
@@ -1939,7 +1939,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
 
     timer_init();
 
-    microcode_init_cache(module_map, mbi); /* Needs xmalloc() */
+    microcode_init_cache(module_map, bi); /* Needs xmalloc() */
 
     tsx_init(); /* Needs microcode.  May change HLE/RTM feature bits. */
 
-- 
2.30.2



  parent reply	other threads:[~2024-10-06 21:52 UTC|newest]

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

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=20241006214956.24339-18-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=stefano.stabellini@amd.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.