lkml.org 
[lkml]   [2020]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/entry] x86/entry: Convert XEN hypercall vector to IDTENTRY_SYSVEC
    The following commit has been merged into the x86/entry branch of tip:

    Commit-ID: eea840b3e3afa140777b31aef52dc8166b05aae2
    Gitweb: https://git.kernel.org/tip/eea840b3e3afa140777b31aef52dc8166b05aae2
    Author: Thomas Gleixner <tglx@linutronix.de>
    AuthorDate: Thu, 21 May 2020 22:05:44 +02:00
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitterDate: Tue, 26 May 2020 19:06:29 +02:00

    x86/entry: Convert XEN hypercall vector to IDTENTRY_SYSVEC

    Convert the last oldstyle defined vector to IDTENTRY_SYSVEC:

    - Implement the C entry point with DEFINE_IDTENTRY_SYSVEC
    - Emit the ASM stub with DECLARE_IDTENTRY_SYSVEC
    - Remove the ASM idtentries in 64-bit
    - Remove the BUILD_INTERRUPT entries in 32-bit
    - Remove the old prototypes

    Fixup the related XEN code by providing the primary C entry point in x86 to
    avoid cluttering the generic code with X86'isms.

    No functional change.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Andy Lutomirski <luto@kernel.org>
    Link: https://lore.kernel.org/r/20200521202119.741950104@linutronix.de
    ---
    arch/x86/entry/entry_32.S | 5 -----
    arch/x86/entry/entry_64.S | 5 -----
    arch/x86/include/asm/idtentry.h | 4 ++++
    arch/x86/xen/enlighten_hvm.c | 12 ++++++++++++
    drivers/xen/events/events_base.c | 6 ++----
    include/xen/events.h | 7 -------
    6 files changed, 18 insertions(+), 21 deletions(-)

    diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
    index 212671a..e034b56 100644
    --- a/arch/x86/entry/entry_32.S
    +++ b/arch/x86/entry/entry_32.S
    @@ -1337,11 +1337,6 @@ SYM_FUNC_START(xen_failsafe_callback)
    SYM_FUNC_END(xen_failsafe_callback)
    #endif /* CONFIG_XEN_PV */

    -#ifdef CONFIG_XEN_PVHVM
    -BUILD_INTERRUPT3(xen_hvm_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
    - xen_evtchn_do_upcall)
    -#endif
    -
    SYM_CODE_START_LOCAL_NOALIGN(handle_exception)
    /* the function address is in %gs's slot on the stack */
    SAVE_ALL switch_stacks=1 skip_gs=1 unwind_espfix=1
    diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
    index b97fcda..fd7efb8 100644
    --- a/arch/x86/entry/entry_64.S
    +++ b/arch/x86/entry/entry_64.S
    @@ -1111,11 +1111,6 @@ SYM_CODE_START(xen_failsafe_callback)
    SYM_CODE_END(xen_failsafe_callback)
    #endif /* CONFIG_XEN_PV */

    -#ifdef CONFIG_XEN_PVHVM
    -apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
    - xen_hvm_callback_vector xen_evtchn_do_upcall
    -#endif
    -
    /*
    * Save all registers in pt_regs, and switch gs if needed.
    * Use slow, but surefire "are we in kernel?" check.
    diff --git a/arch/x86/include/asm/idtentry.h b/arch/x86/include/asm/idtentry.h
    index 3f84388..f24701f 100644
    --- a/arch/x86/include/asm/idtentry.h
    +++ b/arch/x86/include/asm/idtentry.h
    @@ -622,6 +622,10 @@ DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_STIMER0_VECTOR, sysvec_hyperv_stimer0);
    DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_CALLBACK_VECTOR, sysvec_acrn_hv_callback);
    #endif

    +#ifdef CONFIG_XEN_PVHVM
    +DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_CALLBACK_VECTOR, sysvec_xen_hvm_callback);
    +#endif
    +
    #undef X86_TRAP_OTHER

    #endif
    diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
    index e138f7d..3e89b00 100644
    --- a/arch/x86/xen/enlighten_hvm.c
    +++ b/arch/x86/xen/enlighten_hvm.c
    @@ -13,6 +13,7 @@
    #include <asm/smp.h>
    #include <asm/reboot.h>
    #include <asm/setup.h>
    +#include <asm/idtentry.h>
    #include <asm/hypervisor.h>
    #include <asm/e820/api.h>
    #include <asm/early_ioremap.h>
    @@ -118,6 +119,17 @@ static void __init init_hvm_pv_info(void)
    this_cpu_write(xen_vcpu_id, smp_processor_id());
    }

    +DEFINE_IDTENTRY_SYSVEC(sysvec_xen_hvm_callback)
    +{
    + struct pt_regs *old_regs = set_irq_regs(regs);
    +
    + inc_irq_stat(irq_hv_callback_count);
    +
    + xen_hvm_evtchn_do_upcall();
    +
    + set_irq_regs(old_regs);
    +}
    +
    #ifdef CONFIG_KEXEC_CORE
    static void xen_hvm_shutdown(void)
    {
    diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
    index eb35c3c..140c7bf 100644
    --- a/drivers/xen/events/events_base.c
    +++ b/drivers/xen/events/events_base.c
    @@ -37,6 +37,7 @@
    #ifdef CONFIG_X86
    #include <asm/desc.h>
    #include <asm/ptrace.h>
    +#include <asm/idtentry.h>
    #include <asm/irq.h>
    #include <asm/io_apic.h>
    #include <asm/i8259.h>
    @@ -1236,9 +1237,6 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
    struct pt_regs *old_regs = set_irq_regs(regs);

    irq_enter();
    -#ifdef CONFIG_X86
    - inc_irq_stat(irq_hv_callback_count);
    -#endif

    __xen_evtchn_do_upcall();

    @@ -1658,7 +1656,7 @@ static __init void xen_alloc_callback_vector(void)
    return;

    pr_info("Xen HVM callback vector for event delivery is enabled\n");
    - alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, xen_hvm_callback_vector);
    + alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, asm_sysvec_xen_hvm_callback);
    }
    #else
    void xen_setup_callback_vector(void) {}
    diff --git a/include/xen/events.h b/include/xen/events.h
    index 12b0dcb..df1e639 100644
    --- a/include/xen/events.h
    +++ b/include/xen/events.h
    @@ -90,13 +90,6 @@ unsigned int irq_from_evtchn(evtchn_port_t evtchn);
    int irq_from_virq(unsigned int cpu, unsigned int virq);
    evtchn_port_t evtchn_from_irq(unsigned irq);

    -#ifdef CONFIG_XEN_PVHVM
    -/* Xen HVM evtchn vector callback */
    -void xen_hvm_callback_vector(void);
    -#ifdef CONFIG_TRACING
    -#define trace_xen_hvm_callback_vector xen_hvm_callback_vector
    -#endif
    -#endif
    int xen_set_callback_via(uint64_t via);
    void xen_evtchn_do_upcall(struct pt_regs *regs);
    void xen_hvm_evtchn_do_upcall(void);
    \
     
     \ /
      Last update: 2020-05-27 10:14    [W:3.416 / U:0.704 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site