On 5/5/20 9:53 AM, Thomas Gleixner wrote:
> --- a/arch/x86/xen/setup.c
> +++ b/arch/x86/xen/setup.c
> @@ -20,6 +20,7 @@
>  #include <asm/setup.h>
>  #include <asm/acpi.h>
>  #include <asm/numa.h>
> +#include <asm/idtentry.h>
>  #include <asm/xen/hypervisor.h>
>  #include <asm/xen/hypercall.h>
>  
> @@ -993,7 +994,8 @@ static void __init xen_pvmmu_arch_setup(
>       HYPERVISOR_vm_assist(VMASST_CMD_enable,
>                            VMASST_TYPE_pae_extended_cr3);
>  
> -     if (register_callback(CALLBACKTYPE_event, xen_hypervisor_callback) ||
> +     if (register_callback(CALLBACKTYPE_event,
> +                           asm_exc_xen_hypervisor_callback) ||


This ...


>           register_callback(CALLBACKTYPE_failsafe, xen_failsafe_callback))
>               BUG();
>  
> --- a/arch/x86/xen/smp_pv.c
> +++ b/arch/x86/xen/smp_pv.c
> @@ -27,6 +27,7 @@
>  #include <asm/paravirt.h>
>  #include <asm/desc.h>
>  #include <asm/pgtable.h>
> +#include <asm/idtentry.h>
>  #include <asm/cpu.h>
>  
>  #include <xen/interface/xen.h>
> @@ -347,7 +348,7 @@ cpu_initialize_context(unsigned int cpu,
>       ctxt->gs_base_kernel = per_cpu_offset(cpu);
>  #endif
>       ctxt->event_callback_eip    =
> -             (unsigned long)xen_hypervisor_callback;
> +             (unsigned long)asm_exc_xen_hypervisor_callback;


... and this should be xen_asm_exc_xen_hypervisor_callback (we need to
pop %rcx and %r11).


And then Xen PV guest boots.


-boris


>       ctxt->failsafe_callback_eip =
>               (unsigned long)xen_failsafe_callback;
>       per_cpu(xen_cr3, cpu) = __pa(swapper_pg_dir);

Reply via email to