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@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
(cherry picked from commit
1212af3e8c4d3a1350046d4fe0ca3b97b51e67de)
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
__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)(
- 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);
#endif
#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 */
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;
}
/* 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;
}