From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: xen-devel@lists.xenproject.org
Cc: "Christopher Clark" <christopher.w.clark@gmail.com>,
jason.andryuk@amd.com, stefano.stabellini@amd.com,
"Daniel P . Smith" <dpsmith@apertussolutions.com>,
"Jan Beulich" <jbeulich@suse.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH v5 01/44] x86/boot: move x86 boot module counting into a new boot_info struct
Date: Sun, 6 Oct 2024 17:49:12 -0400 [thread overview]
Message-ID: <20241006214956.24339-2-dpsmith@apertussolutions.com> (raw)
In-Reply-To: <20241006214956.24339-1-dpsmith@apertussolutions.com>
From: Christopher Clark <christopher.w.clark@gmail.com>
An initial step towards a non-multiboot internal representation of boot
modules for common code, starting with x86 setup and converting the fields
that are accessed for the startup calculations.
Introduce a new header, <asm/bootinfo.h>, and populate it with a new boot_info
structure initially containing a count of the number of boot modules.
No functional change intended.
Signed-off-by: Christopher Clark <christopher.w.clark@gmail.com>
Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
---
xen/arch/x86/include/asm/bootinfo.h | 29 +++++++++++++
xen/arch/x86/include/asm/setup.h | 2 +
xen/arch/x86/setup.c | 64 ++++++++++++++++++-----------
3 files changed, 71 insertions(+), 24 deletions(-)
create mode 100644 xen/arch/x86/include/asm/bootinfo.h
diff --git a/xen/arch/x86/include/asm/bootinfo.h b/xen/arch/x86/include/asm/bootinfo.h
new file mode 100644
index 000000000000..a649500ee3a2
--- /dev/null
+++ b/xen/arch/x86/include/asm/bootinfo.h
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (c) 2024 Christopher Clark <christopher.w.clark@gmail.com>
+ * Copyright (c) 2024 Apertus Solutions, LLC
+ * Author: Daniel P. Smith <dpsmith@apertussolutions.com>
+ */
+
+#ifndef __XEN_X86_BOOTINFO_H__
+#define __XEN_X86_BOOTINFO_H__
+
+/*
+ * Xen internal representation of information provided by the
+ * bootloader/environment, or derived from the information.
+ */
+struct boot_info {
+ unsigned int nr_modules;
+};
+
+#endif /* __XEN_X86_BOOTINFO_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/arch/x86/include/asm/setup.h b/xen/arch/x86/include/asm/setup.h
index d75589178b91..3d189521189d 100644
--- a/xen/arch/x86/include/asm/setup.h
+++ b/xen/arch/x86/include/asm/setup.h
@@ -32,6 +32,8 @@ int construct_dom0(
const char *cmdline);
void setup_io_bitmap(struct domain *d);
+extern struct boot_info xen_boot_info;
+
unsigned long initial_images_nrpages(nodeid_t node);
void discard_initial_images(void);
void *bootstrap_map(const module_t *mod);
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index a6e77c9ed9fc..b75deb4fe4ee 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -32,6 +32,7 @@
#include <compat/xen.h>
#endif
#include <xen/bitops.h>
+#include <asm/bootinfo.h>
#include <asm/smp.h>
#include <asm/processor.h>
#include <asm/mpspec.h>
@@ -274,16 +275,28 @@ static int __init cf_check parse_acpi_param(const char *s)
custom_param("acpi", parse_acpi_param);
static const module_t *__initdata initial_images;
-static unsigned int __initdata nr_initial_images;
+
+struct boot_info __initdata xen_boot_info;
+
+static struct boot_info __init *multiboot_fill_boot_info(unsigned long mbi_p)
+{
+ struct boot_info *bi = &xen_boot_info;
+ const multiboot_info_t *mbi = __va(mbi_p);
+
+ bi->nr_modules = (mbi->flags & MBI_MODULES) ? mbi->mods_count : 0;
+
+ return bi;
+}
unsigned long __init initial_images_nrpages(nodeid_t node)
{
+ struct boot_info *bi = &xen_boot_info;
unsigned long node_start = node_start_pfn(node);
unsigned long node_end = node_end_pfn(node);
unsigned long nr;
unsigned int i;
- for ( nr = i = 0; i < nr_initial_images; ++i )
+ for ( nr = i = 0; i < bi->nr_modules; ++i )
{
unsigned long start = initial_images[i].mod_start;
unsigned long end = start + PFN_UP(initial_images[i].mod_end);
@@ -297,9 +310,10 @@ unsigned long __init initial_images_nrpages(nodeid_t node)
void __init discard_initial_images(void)
{
+ struct boot_info *bi = &xen_boot_info;
unsigned int i;
- for ( i = 0; i < nr_initial_images; ++i )
+ for ( i = 0; i < bi->nr_modules; ++i )
{
uint64_t start = (uint64_t)initial_images[i].mod_start << PAGE_SHIFT;
@@ -307,7 +321,7 @@ void __init discard_initial_images(void)
start + PAGE_ALIGN(initial_images[i].mod_end));
}
- nr_initial_images = 0;
+ bi->nr_modules = 0;
initial_images = NULL;
}
@@ -969,6 +983,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
void *bsp_stack;
struct cpu_info *info = get_cpu_info(), *bsp_info;
unsigned int initrdidx, num_parked = 0;
+ struct boot_info *bi;
multiboot_info_t *mbi;
module_t *mod;
unsigned long nr_pages, raw_max_page, modules_headroom, module_map[1];
@@ -1015,6 +1030,8 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
mod = __va(mbi->mods_addr);
}
+ bi = multiboot_fill_boot_info(mbi_p);
+
loader = (mbi->flags & MBI_LOADERNAME) ? __va(mbi->boot_loader_name)
: "unknown";
@@ -1122,18 +1139,18 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
bootsym(boot_edd_info_nr));
/* Check that we have at least one Multiboot module. */
- if ( !(mbi->flags & MBI_MODULES) || (mbi->mods_count == 0) )
+ if ( !bi->nr_modules )
panic("dom0 kernel not specified. Check bootloader configuration\n");
/* Check that we don't have a silly number of modules. */
- if ( mbi->mods_count > sizeof(module_map) * 8 )
+ if ( bi->nr_modules > sizeof(module_map) * 8 )
{
- mbi->mods_count = sizeof(module_map) * 8;
- printk("Excessive multiboot modules - using the first %u only\n",
- mbi->mods_count);
+ bi->nr_modules = sizeof(module_map) * 8;
+ printk("Excessive boot modules - using the first %u only\n",
+ bi->nr_modules);
}
- bitmap_fill(module_map, mbi->mods_count);
+ bitmap_fill(module_map, bi->nr_modules);
__clear_bit(0, module_map); /* Dom0 kernel is always first */
if ( pvh_boot )
@@ -1306,9 +1323,8 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
kexec_reserve_area();
initial_images = mod;
- nr_initial_images = mbi->mods_count;
- for ( i = 0; !efi_enabled(EFI_LOADER) && i < mbi->mods_count; i++ )
+ for ( i = 0; !efi_enabled(EFI_LOADER) && i < bi->nr_modules; i++ )
{
if ( mod[i].mod_start & (PAGE_SIZE - 1) )
panic("Bootloader didn't honor module alignment request\n");
@@ -1332,8 +1348,8 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
* respective reserve_e820_ram() invocation below. No need to
* query efi_boot_mem_unused() here, though.
*/
- mod[mbi->mods_count].mod_start = virt_to_mfn(_stext);
- mod[mbi->mods_count].mod_end = __2M_rwdata_end - _stext;
+ mod[bi->nr_modules].mod_start = virt_to_mfn(_stext);
+ mod[bi->nr_modules].mod_end = __2M_rwdata_end - _stext;
}
modules_headroom = bzimage_headroom(bootstrap_map(mod), mod->mod_end);
@@ -1393,7 +1409,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
{
/* Don't overlap with modules. */
end = consider_modules(s, e, reloc_size + mask,
- mod, mbi->mods_count, -1);
+ mod, bi->nr_modules, -1);
end &= ~mask;
}
else
@@ -1414,7 +1430,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
}
/* Is the region suitable for relocating the multiboot modules? */
- for ( j = mbi->mods_count - 1; j >= 0; j-- )
+ for ( j = bi->nr_modules - 1; j >= 0; j-- )
{
/*
* 'headroom' is a guess for the decompressed size and
@@ -1429,7 +1445,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
/* Don't overlap with other modules (or Xen itself). */
end = consider_modules(s, e, size, mod,
- mbi->mods_count + relocated, j);
+ bi->nr_modules + relocated, j);
if ( highmem_start && end > highmem_start )
continue;
@@ -1456,7 +1472,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
{
/* Don't overlap with modules (or Xen itself). */
e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), mod,
- mbi->mods_count + relocated, -1);
+ bi->nr_modules + relocated, -1);
if ( s >= e )
break;
if ( e > kexec_crash_area_limit )
@@ -1471,7 +1487,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
if ( modules_headroom && !mod->reserved )
panic("Not enough memory to relocate the dom0 kernel image\n");
- for ( i = 0; i < mbi->mods_count; ++i )
+ for ( i = 0; i < bi->nr_modules; ++i )
{
uint64_t s = (uint64_t)mod[i].mod_start << PAGE_SHIFT;
@@ -1551,7 +1567,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
ASSERT(j);
}
map_e = boot_e820.map[j].addr + boot_e820.map[j].size;
- for ( j = 0; j < mbi->mods_count; ++j )
+ for ( j = 0; j < bi->nr_modules; ++j )
{
uint64_t end = pfn_to_paddr(mod[j].mod_start) +
mod[j].mod_end;
@@ -1626,7 +1642,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
}
}
- for ( i = 0; i < mbi->mods_count; ++i )
+ for ( i = 0; i < bi->nr_modules; ++i )
{
set_pdx_range(mod[i].mod_start,
mod[i].mod_start + PFN_UP(mod[i].mod_end));
@@ -2011,8 +2027,8 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
cpu_has_nx ? XENLOG_INFO : XENLOG_WARNING "Warning: ",
cpu_has_nx ? "" : "not ");
- initrdidx = find_first_bit(module_map, mbi->mods_count);
- if ( bitmap_weight(module_map, mbi->mods_count) > 1 )
+ initrdidx = find_first_bit(module_map, bi->nr_modules);
+ if ( bitmap_weight(module_map, bi->nr_modules) > 1 )
printk(XENLOG_WARNING
"Multiple initrd candidates, picking module #%u\n",
initrdidx);
@@ -2022,7 +2038,7 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
* above our heap. The second module, if present, is an initrd ramdisk.
*/
dom0 = create_dom0(mod, modules_headroom,
- initrdidx < mbi->mods_count ? mod + initrdidx : NULL,
+ initrdidx < bi->nr_modules ? mod + initrdidx : NULL,
kextra, loader);
if ( !dom0 )
panic("Could not set up DOM0 guest OS\n");
--
2.30.2
next prev parent reply other threads:[~2024-10-06 21:50 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 ` Daniel P. Smith [this message]
2024-10-07 17:57 ` [PATCH v5 01/44] x86/boot: move x86 boot module counting into a new boot_info struct 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 ` [PATCH v5 17/44] x86/boot: convert microcode loading to consume struct boot_info Daniel P. Smith
2024-10-07 21:22 ` 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-2-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.