[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen stable-4.18] x86/PV: avoid indirect call for I/O emulation quirk hook
commit b06cf0701adf9ebc7ca00c386f11b798c8416715 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Mon Jan 22 13:40:00 2024 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Tue Apr 9 16:45:01 2024 +0100 x86/PV: avoid indirect call for I/O emulation quirk hook This way ioemul_handle_proliant_quirk() won't need ENDBR anymore. While touching this code, also - arrange for it to not be built at all when !PV, - add "const" to the last function parameter and bring the definition in sync with the declaration (for Misra). Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> (cherry picked from commit 1212af3e8c4d3a1350046d4fe0ca3b97b51e67de) --- xen/arch/x86/Makefile | 2 +- xen/arch/x86/include/asm/io.h | 10 +++++++--- xen/arch/x86/ioport_emulate.c | 9 ++++----- xen/arch/x86/pv/emul-priv-op.c | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index f3abdf9cd1..9f326b9e32 100644 --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -45,7 +45,7 @@ obj-$(CONFIG_LIVEPATCH) += alternative.o livepatch.o obj-y += msi.o obj-y += msr.o obj-$(CONFIG_INDIRECT_THUNK) += indirect-thunk.o -obj-y += ioport_emulate.o +obj-$(CONFIG_PV) += ioport_emulate.o obj-y += irq.o obj-$(CONFIG_KEXEC) += machine_kexec.o obj-y += mm.o x86_64/mm.o diff --git a/xen/arch/x86/include/asm/io.h b/xen/arch/x86/include/asm/io.h index 8c8a15bd06..9b19d2d389 100644 --- a/xen/arch/x86/include/asm/io.h +++ b/xen/arch/x86/include/asm/io.h @@ -47,10 +47,14 @@ __OUT(b,"b",char) __OUT(w,"w",short) __OUT(l,,int) -/* Function pointer used to handle platform specific I/O port emulation. */ +/* + * Boolean indicator and function used to handle platform specific I/O port + * emulation. + */ #define IOEMUL_QUIRK_STUB_BYTES 9 +extern bool ioemul_handle_quirk; struct cpu_user_regs; -extern unsigned int (*ioemul_handle_quirk)( - uint8_t opcode, char *io_emul_stub, struct cpu_user_regs *regs); +unsigned int ioemul_handle_proliant_quirk( + uint8_t opcode, char *io_emul_stub, const struct cpu_user_regs *regs); #endif diff --git a/xen/arch/x86/ioport_emulate.c b/xen/arch/x86/ioport_emulate.c index 6caeb3d470..0c1e389bc8 100644 --- a/xen/arch/x86/ioport_emulate.c +++ b/xen/arch/x86/ioport_emulate.c @@ -8,11 +8,10 @@ #include <xen/sched.h> #include <xen/dmi.h> -unsigned int (*__read_mostly ioemul_handle_quirk)( - uint8_t opcode, char *io_emul_stub, struct cpu_user_regs *regs); +bool __ro_after_init ioemul_handle_quirk; -static unsigned int cf_check ioemul_handle_proliant_quirk( - u8 opcode, char *io_emul_stub, struct cpu_user_regs *regs) +unsigned int ioemul_handle_proliant_quirk( + uint8_t opcode, char *io_emul_stub, const struct cpu_user_regs *regs) { static const char stub[] = { 0x9c, /* pushf */ @@ -103,7 +102,7 @@ static const struct dmi_system_id __initconstrel ioport_quirks_tbl[] = { static int __init cf_check ioport_quirks_init(void) { if ( dmi_check_system(ioport_quirks_tbl) ) - ioemul_handle_quirk = ioemul_handle_proliant_quirk; + ioemul_handle_quirk = true; return 0; } diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index 0d9f84f458..f101510a1b 100644 --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -112,7 +112,7 @@ static io_emul_stub_t *io_emul_stub_setup(struct priv_op_ctxt *ctxt, u8 opcode, /* Some platforms might need to quirk the stub for specific inputs. */ if ( unlikely(ioemul_handle_quirk) ) { - quirk_bytes = ioemul_handle_quirk(opcode, p, ctxt->ctxt.regs); + quirk_bytes = ioemul_handle_proliant_quirk(opcode, p, ctxt->ctxt.regs); p += quirk_bytes; } -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.18
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |