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

Re: [Xen-devel] [PATCH 06/18] xen/arm: Introduce a virtual abort injection helper



On Mon, 13 Mar 2017, Wei Chen wrote:
> When guest triggers async aborts, in most platform, such aborts
> will be routed to hypervisor. But we don't want the hypervisor
> to handle such aborts, so we have to route such aborts back to
> the guest.
> 
> This helper is using the HCR_EL2.VSE (HCR.VA for aarch32) bit to
> route such aborts back to the guest. If the guest PC had been
> advanced by SVC/HVC/SMC instructions before we caught the SError
> in hypervisor, we have to adjust the guest PC to exact address
> while the SError generated.
> 
> About HSR_EC_SVC32/64, even thought we don't trap SVC32/64 today,
> we would like them to be handled here. This would be useful when
> VM introspection will gain support of SVC32/64 trapping.
> 
> This helper will be used by the later patches in this series, we
> use #if 0 to disable it in this patch temporarily to remove the
> warning message of unused function from compiler.
> 
> Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx>

Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>

> ---
>  xen/arch/arm/traps.c            | 32 ++++++++++++++++++++++++++++++++
>  xen/include/asm-arm/processor.h |  1 +
>  2 files changed, 33 insertions(+)
> 
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index c11359d..e425832 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -618,6 +618,38 @@ static void inject_dabt_exception(struct cpu_user_regs 
> *regs,
>  #endif
>  }
>  
> +#if 0
> +/* Inject a virtual Abort/SError into the guest. */
> +static void inject_vabt_exception(struct cpu_user_regs *regs)
> +{
> +    const union hsr hsr = { .bits = regs->hsr };
> +
> +    /*
> +     * SVC/HVC/SMC already have an adjusted PC (See ARM ARM DDI 0487A.j
> +     * D1.10.1 for more details), which we need to correct in order to
> +     * return to after having injected the SError.
> +     */
> +    switch ( hsr.ec )
> +    {
> +    case HSR_EC_SVC32:
> +    case HSR_EC_HVC32:
> +    case HSR_EC_SMC32:
> +#ifdef CONFIG_ARM_64
> +    case HSR_EC_SVC64:
> +    case HSR_EC_HVC64:
> +    case HSR_EC_SMC64:
> +#endif
> +        regs->pc -= hsr.len ? 4 : 2;
> +        break;
> +
> +    default:
> +        break;
> +    }
> +
> +    current->arch.hcr_el2 |= HCR_VA;
> +}
> +#endif
> +
>  struct reg_ctxt {
>      /* Guest-side state */
>      uint32_t sctlr_el1;
> diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h
> index 4b6338b..d7b0711 100644
> --- a/xen/include/asm-arm/processor.h
> +++ b/xen/include/asm-arm/processor.h
> @@ -252,6 +252,7 @@
>  #define HSR_EC_HVC32                0x12
>  #define HSR_EC_SMC32                0x13
>  #ifdef CONFIG_ARM_64
> +#define HSR_EC_SVC64                0x15
>  #define HSR_EC_HVC64                0x16
>  #define HSR_EC_SMC64                0x17
>  #define HSR_EC_SYSREG               0x18
> -- 
> 2.7.4
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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