From: Juergen Gross <jgross@suse.com>
To: linux-kernel@vger.kernel.org, x86@kernel.org
Cc: Juergen Gross <jgross@suse.com>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
xen-devel@lists.xenproject.org
Subject: [PATCH v4 16/21] x86/xen: Drop xen_cpu_ops
Date: Thu, 27 Nov 2025 08:08:39 +0100 [thread overview]
Message-ID: <20251127070844.21919-17-jgross@suse.com> (raw)
In-Reply-To: <20251127070844.21919-1-jgross@suse.com>
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@suse.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
next prev parent reply other threads:[~2025-11-27 7:10 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-27 7:08 [PATCH v4 00/21] paravirt: cleanup and reorg Juergen Gross
2025-11-27 7:08 ` [PATCH v4 01/21] x86/paravirt: Remove not needed includes of paravirt.h Juergen Gross
2025-11-27 7:08 ` [PATCH v4 02/21] x86/paravirt: Remove some unneeded struct declarations Juergen Gross
2025-11-27 7:08 ` [PATCH v4 03/21] x86/paravirt: Remove PARAVIRT_DEBUG config option Juergen Gross
2025-11-27 7:08 ` [PATCH v4 04/21] x86/paravirt: Move thunk macros to paravirt_types.h Juergen Gross
2025-11-27 7:08 ` [PATCH v4 05/21] paravirt: Remove asm/paravirt_api_clock.h Juergen Gross
2025-11-27 7:08 ` [PATCH v4 06/21] sched: Move clock related paravirt code to kernel/sched Juergen Gross
2025-11-27 7:08 ` [PATCH v4 07/21] arm/paravirt: Use common code for paravirt_steal_clock() Juergen Gross
2025-11-27 7:08 ` [PATCH v4 08/21] arm64/paravirt: " Juergen Gross
2025-11-27 7:08 ` [PATCH v4 09/21] loongarch/paravirt: " Juergen Gross
2025-11-27 7:08 ` [PATCH v4 10/21] riscv/paravirt: " Juergen Gross
2025-11-27 7:08 ` [PATCH v4 11/21] x86/paravirt: " Juergen Gross
2025-11-27 7:08 ` [PATCH v4 12/21] x86/paravirt: Move paravirt_sched_clock() related code into tsc.c Juergen Gross
2025-11-27 7:08 ` [PATCH v4 13/21] x86/paravirt: Introduce new paravirt-base.h header Juergen Gross
2025-11-27 7:08 ` [PATCH v4 14/21] x86/paravirt: Move pv_native_*() prototypes to paravirt.c Juergen Gross
2025-11-27 7:08 ` [PATCH v4 15/21] x86/xen: Drop xen_irq_ops Juergen Gross
2025-12-15 19:10 ` Boris Ostrovsky
2025-11-27 7:08 ` Juergen Gross [this message]
2025-12-15 19:14 ` [PATCH v4 16/21] x86/xen: Drop xen_cpu_ops Boris Ostrovsky
2025-11-27 7:08 ` [PATCH v4 17/21] x86/xen: Drop xen_mmu_ops Juergen Gross
2025-12-15 19:16 ` Boris Ostrovsky
2025-11-27 7:08 ` [PATCH v4 18/21] objtool: Allow multiple pv_ops arrays Juergen Gross
2025-11-27 7:08 ` [PATCH v4 19/21] x86/paravirt: Allow pv-calls outside paravirt.h Juergen Gross
2025-11-27 7:08 ` [PATCH v4 20/21] x86/paravirt: Specify pv_ops array in paravirt macros Juergen Gross
2025-11-27 7:08 ` [PATCH v4 21/21] x86/pvlocks: Move paravirt spinlock functions into own header Juergen Gross
2025-11-27 9:24 ` kernel test robot
2025-11-27 9:24 ` kernel test robot
2025-12-15 8:27 ` [PATCH v4 00/21] paravirt: cleanup and reorg Juergen Gross
2026-02-20 4:10 ` patchwork-bot+linux-riscv
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=20251127070844.21919-17-jgross@suse.com \
--to=jgross@suse.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox