[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251127070844.21919-17-jgross@suse.com>
Date: Thu, 27 Nov 2025 08:08:39 +0100
From: Juergen Gross <jgross@...e.com>
To: linux-kernel@...r.kernel.org,
x86@...nel.org
Cc: Juergen Gross <jgross@...e.com>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
Borislav Petkov <bp@...en8.de>,
Dave Hansen <dave.hansen@...ux.intel.com>,
"H. Peter Anvin" <hpa@...or.com>,
Josh Poimboeuf <jpoimboe@...nel.org>,
Peter Zijlstra <peterz@...radead.org>,
xen-devel@...ts.xenproject.org
Subject: [PATCH v4 16/21] x86/xen: Drop xen_cpu_ops
Instead of having a pre-filled array xen_cpu_ops for Xen PV paravirt
functions, drop the array and assign each element individually.
This is in preparation of reducing the paravirt include hell by
splitting paravirt.h into multiple more fine grained header files,
which will in turn require to split up the pv_ops vector as well.
Dropping the pre-filled array makes life easier for objtool to
detect missing initializers in multiple pv_ops_ arrays.
Signed-off-by: Juergen Gross <jgross@...e.com>
---
V2:
- new patch
---
arch/x86/xen/enlighten_pv.c | 82 +++++++++++++++----------------------
tools/objtool/check.c | 1 -
2 files changed, 33 insertions(+), 50 deletions(-)
diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
index 4806cc28d7ca..65df3a0d9cf3 100644
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -1212,54 +1212,6 @@ static const struct pv_info xen_info __initconst = {
.name = "Xen",
};
-static const typeof(pv_ops) xen_cpu_ops __initconst = {
- .cpu = {
- .cpuid = xen_cpuid,
-
- .set_debugreg = xen_set_debugreg,
- .get_debugreg = xen_get_debugreg,
-
- .read_cr0 = xen_read_cr0,
- .write_cr0 = xen_write_cr0,
-
- .write_cr4 = xen_write_cr4,
-
- .read_msr = xen_read_msr,
- .write_msr = xen_write_msr,
-
- .read_msr_safe = xen_read_msr_safe,
- .write_msr_safe = xen_write_msr_safe,
-
- .read_pmc = xen_read_pmc,
-
- .load_tr_desc = paravirt_nop,
- .set_ldt = xen_set_ldt,
- .load_gdt = xen_load_gdt,
- .load_idt = xen_load_idt,
- .load_tls = xen_load_tls,
- .load_gs_index = xen_load_gs_index,
-
- .alloc_ldt = xen_alloc_ldt,
- .free_ldt = xen_free_ldt,
-
- .store_tr = xen_store_tr,
-
- .write_ldt_entry = xen_write_ldt_entry,
- .write_gdt_entry = xen_write_gdt_entry,
- .write_idt_entry = xen_write_idt_entry,
- .load_sp0 = xen_load_sp0,
-
-#ifdef CONFIG_X86_IOPL_IOPERM
- .invalidate_io_bitmap = xen_invalidate_io_bitmap,
- .update_io_bitmap = xen_update_io_bitmap,
-#endif
- .io_delay = xen_io_delay,
-
- .start_context_switch = xen_start_context_switch,
- .end_context_switch = xen_end_context_switch,
- },
-};
-
static void xen_restart(char *msg)
{
xen_reboot(SHUTDOWN_reboot);
@@ -1411,7 +1363,39 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si)
/* Install Xen paravirt ops */
pv_info = xen_info;
- pv_ops.cpu = xen_cpu_ops.cpu;
+
+ pv_ops.cpu.cpuid = xen_cpuid;
+ pv_ops.cpu.set_debugreg = xen_set_debugreg;
+ pv_ops.cpu.get_debugreg = xen_get_debugreg;
+ pv_ops.cpu.read_cr0 = xen_read_cr0;
+ pv_ops.cpu.write_cr0 = xen_write_cr0;
+ pv_ops.cpu.write_cr4 = xen_write_cr4;
+ pv_ops.cpu.read_msr = xen_read_msr;
+ pv_ops.cpu.write_msr = xen_write_msr;
+ pv_ops.cpu.read_msr_safe = xen_read_msr_safe;
+ pv_ops.cpu.write_msr_safe = xen_write_msr_safe;
+ pv_ops.cpu.read_pmc = xen_read_pmc;
+ pv_ops.cpu.load_tr_desc = paravirt_nop;
+ pv_ops.cpu.set_ldt = xen_set_ldt;
+ pv_ops.cpu.load_gdt = xen_load_gdt;
+ pv_ops.cpu.load_idt = xen_load_idt;
+ pv_ops.cpu.load_tls = xen_load_tls;
+ pv_ops.cpu.load_gs_index = xen_load_gs_index;
+ pv_ops.cpu.alloc_ldt = xen_alloc_ldt;
+ pv_ops.cpu.free_ldt = xen_free_ldt;
+ pv_ops.cpu.store_tr = xen_store_tr;
+ pv_ops.cpu.write_ldt_entry = xen_write_ldt_entry;
+ pv_ops.cpu.write_gdt_entry = xen_write_gdt_entry;
+ pv_ops.cpu.write_idt_entry = xen_write_idt_entry;
+ pv_ops.cpu.load_sp0 = xen_load_sp0;
+#ifdef CONFIG_X86_IOPL_IOPERM
+ pv_ops.cpu.invalidate_io_bitmap = xen_invalidate_io_bitmap;
+ pv_ops.cpu.update_io_bitmap = xen_update_io_bitmap;
+#endif
+ pv_ops.cpu.io_delay = xen_io_delay;
+ pv_ops.cpu.start_context_switch = xen_start_context_switch;
+ pv_ops.cpu.end_context_switch = xen_end_context_switch;
+
xen_init_irq_ops();
/*
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 3fd551c080ee..5c00bca8dc11 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -593,7 +593,6 @@ static int init_pv_ops(struct objtool_file *file)
{
static const char *pv_ops_tables[] = {
"pv_ops",
- "xen_cpu_ops",
"xen_mmu_ops",
NULL,
};
--
2.51.0
Powered by blists - more mailing lists