On 5/12/20 5:01 PM, Thomas Gleixner wrote:
> Convert the XEN/PV hypercall to IDTENTRY:
>
>   - Emit the ASM stub with DECLARE_IDTENTRY
>   - Remove the ASM idtentry in 64bit
>   - Remove the open coded ASM entry code in 32bit
>   - Remove the old prototypes
>
> The handler stubs need to stay in ASM code as it needs corner case handling
> and adjustment of the stack pointer.
>
> Provide a new C function which invokes the entry/exit handling and calls
> into the XEN handler on the interrupt stack.
>
> The exit code is slightly different from the regular idtentry_exit() on
> non-preemptible kernels. If the hypercall is preemptible and need_resched()
> is set then XEN provides a preempt hypercall scheduling function. Add it as
> conditional path to __idtentry_exit() so the function can be reused.
>
> __idtentry_exit() is forced inlined so on the regular idtentry_exit() path
> the extra condition is optimized out by the compiler.
>
> Signed-off-by: Thomas Gleixner <[email protected]>
> Cc: Boris Ostrovsky <[email protected]>
> Cc: Juergen Gross <[email protected]>
> ---
> V5: Move DECLARE_PER_CPU(bool, xen_in_preemptible_hcall) out of ifdeffery
>     to avoid #ifdeffery in idtentry_exit().
>     Convert to the reworked stack switching helper
>     Fixed up the XEN callback initialization (Boris O.)
> ---
>  arch/x86/entry/common.c         |   57 
> ++++++++++++++++++++++++++++++++++++++--
>  arch/x86/entry/entry_32.S       |   17 ++++++-----
>  arch/x86/entry/entry_64.S       |   22 ++++-----------
>  arch/x86/include/asm/idtentry.h |   13 +++++++++
>  arch/x86/xen/setup.c            |    4 ++
>  arch/x86/xen/smp_pv.c           |    3 +-
>  arch/x86/xen/xen-asm_32.S       |   12 ++++----
>  arch/x86/xen/xen-asm_64.S       |    2 -
>  arch/x86/xen/xen-ops.h          |    1 
>  drivers/xen/preempt.c           |    2 -
>  include/xen/xen-ops.h           |    7 +++-
>  11 files changed, 103 insertions(+), 37 deletions(-)


Reviewed-by: Boris Ostrovsky <[email protected]>


Reply via email to