[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [PATCH RFC 02/16] Save/Restore Support: Refactor trap_init() and setup vector callbacks



Bruno Alvisio, on mar. 19 déc. 2017 15:41:57 -0800, wrote:
> Currently the setup of the IDT and the request to set the HVM vector callbacks
> are performed both in the trap_init function.
> 
> As part of the post-suspend operation, the HVM vector callback needs to be 
> setup
> again while the IDT does not. Thus, the trap_init function is split into two
> separate functions: trap_init (sets up IDT) and xen_callback_vector (sets the
> HVM vector callback). During the post-suspend operations the 
> xen_callback_vector
> function will be invoked.
> 
> Signed-off-by: Bruno Alvisio <bruno.alvisio@xxxxxxxxxx>

Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>

> ---
>  arch/x86/traps.c | 17 +++++++++++------
>  include/x86/os.h |  3 +++
>  2 files changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/x86/traps.c b/arch/x86/traps.c
> index aa17da3..a7388a5 100644
> --- a/arch/x86/traps.c
> +++ b/arch/x86/traps.c
> @@ -389,6 +389,16 @@ static void setup_gate(unsigned int entry, void *addr, 
> unsigned int dpl)
>  #endif
>  }
>  
> +void xen_callback_vector(void)
> +{
> +    if (hvm_set_parameter(HVM_PARAM_CALLBACK_IRQ,
> +                         (2ULL << 56) | TRAP_xen_callback))
> +    {
> +        xprintk("Request for Xen HVM callback vector failed\n");
> +        do_exit();
> +    }
> +}
> +
>  void trap_init(void)
>  {
>      setup_gate(TRAP_divide_error, &divide_error, 0);
> @@ -415,12 +425,7 @@ void trap_init(void)
>      gdt[GDTE_TSS] = (typeof(*gdt))INIT_GDTE((unsigned long)&tss, 0x67, 0x89);
>      asm volatile ("ltr %w0" :: "rm" (GDTE_TSS * 8));
>  
> -    if ( hvm_set_parameter(HVM_PARAM_CALLBACK_IRQ,
> -                           (2ULL << 56) | TRAP_xen_callback) )
> -    {
> -        xprintk("Request for Xen HVM callback vector failed\n");
> -        do_exit();
> -    }
> +    xen_callback_vector();
>  }
>  
>  void trap_fini(void)
> diff --git a/include/x86/os.h b/include/x86/os.h
> index fbc2eeb..d155914 100644
> --- a/include/x86/os.h
> +++ b/include/x86/os.h
> @@ -67,6 +67,9 @@ extern shared_info_t *HYPERVISOR_shared_info;
>  
>  void trap_init(void);
>  void trap_fini(void);
> +#ifndef CONFIG_PARAVIRT
> +void xen_callback_vector(void);
> +#endif
>  
>  void arch_fini(void);
>  
> -- 
> 2.3.2 (Apple Git-55)
> 
> 
> _______________________________________________
> Minios-devel mailing list
> Minios-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/minios-devel

-- 
Samuel
<O> Ça peut être une madeleine à sous munitions (avec des composants,
par exemple)
 -+- #runtime -+-

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.