[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86: hypercall vector is unused when !PV32
commit b06ffca9e7c9a6088e98a8d72e905c03dc585225 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Jan 5 13:17:02 2021 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Jan 5 13:17:02 2021 +0100 x86: hypercall vector is unused when !PV32 This vector can be used as an ordinary interrupt handling one in this case. To be sure no references are left, make the #define itself conditional. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- xen/arch/x86/irq.c | 6 +++++- xen/arch/x86/pv/traps.c | 4 ++++ xen/arch/x86/x86_64/compat/entry.S | 4 ++++ xen/arch/x86/x86_64/entry.S | 4 +++- xen/include/asm-x86/mach-default/irq_vectors.h | 5 ++++- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index 768a8fc7c9..e315fef4a6 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -443,8 +443,12 @@ int __init init_irq_data(void) irq_max_guests = 32; #ifdef CONFIG_PV - /* Never allocate the hypercall vector or Linux/BSD fast-trap vector. */ + /* Never allocate the Linux/BSD fast-trap vector. */ set_bit(LEGACY_SYSCALL_VECTOR, used_vectors); +#endif + +#ifdef CONFIG_PV32 + /* Never allocate the hypercall vector. */ set_bit(HYPERCALL_VECTOR, used_vectors); #endif diff --git a/xen/arch/x86/pv/traps.c b/xen/arch/x86/pv/traps.c index d97ebf7890..7439b76df8 100644 --- a/xen/arch/x86/pv/traps.c +++ b/xen/arch/x86/pv/traps.c @@ -30,6 +30,7 @@ #include <asm/traps.h> #include <irq_vectors.h> +#ifdef CONFIG_PV32 void do_entry_int82(struct cpu_user_regs *regs) { if ( unlikely(untrusted_msi) ) @@ -37,6 +38,7 @@ void do_entry_int82(struct cpu_user_regs *regs) pv_hypercall(regs); } +#endif void pv_inject_event(const struct x86_event *event) { @@ -155,9 +157,11 @@ static void nmi_softirq(void) void __init pv_trap_init(void) { +#ifdef CONFIG_PV32 /* The 32-on-64 hypercall vector is only accessible from ring 1. */ _set_gate(idt_table + HYPERCALL_VECTOR, SYS_DESC_trap_gate, 1, entry_int82); +#endif /* Fast trap for int80 (faster than taking the #GP-fixup path). */ _set_gate(idt_table + LEGACY_SYSCALL_VECTOR, SYS_DESC_trap_gate, 3, diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index 3b2136b272..16a2f439a7 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -11,6 +11,8 @@ #include <public/xen.h> #include <irq_vectors.h> +#ifdef CONFIG_PV32 + ENTRY(entry_int82) ASM_CLAC pushq $0 @@ -27,6 +29,8 @@ ENTRY(entry_int82) mov %rsp, %rdi call do_entry_int82 +#endif /* CONFIG_PV32 */ + /* %rbx: struct vcpu */ ENTRY(compat_test_all_events) ASSERT_NOT_IN_ATOMIC diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 526c388458..c16b3c90be 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -985,8 +985,10 @@ autogen_stubs: /* Automatically generated stubs. */ .rept X86_NR_VECTORS /* Common interrupts, heading towards do_IRQ(). */ -#ifdef CONFIG_PV +#if defined(CONFIG_PV32) .if vec >= FIRST_IRQ_VECTOR && vec != HYPERCALL_VECTOR && vec != LEGACY_SYSCALL_VECTOR +#elif defined(CONFIG_PV) + .if vec >= FIRST_IRQ_VECTOR && vec != LEGACY_SYSCALL_VECTOR #else .if vec >= FIRST_IRQ_VECTOR #endif diff --git a/xen/include/asm-x86/mach-default/irq_vectors.h b/xen/include/asm-x86/mach-default/irq_vectors.h index 3de1d96de9..f546aedd87 100644 --- a/xen/include/asm-x86/mach-default/irq_vectors.h +++ b/xen/include/asm-x86/mach-default/irq_vectors.h @@ -22,7 +22,10 @@ #define FIRST_LEGACY_VECTOR FIRST_DYNAMIC_VECTOR #define LAST_LEGACY_VECTOR (FIRST_LEGACY_VECTOR + 0xf) -#define HYPERCALL_VECTOR 0x82 +#ifdef CONFIG_PV32 +#define HYPERCALL_VECTOR 0x82 +#endif + #define LEGACY_SYSCALL_VECTOR 0x80 /* -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |