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

Re: [Xen-devel] [PATCH v2 15/15] xen/arm: arm64: Document Cortex-A57 erratum 834220



On Mon, 23 May 2016, Julien Grall wrote:
> The ARM erratum applies to certain revisions of Cortex-A57. The
> processor may report a Stage 2 translation fault as the result of
> Stage 1 fault for load crossing a page boundary when there is a
> permission fault or device memory fault at stage 1 and a translation
> fault at Stage 2.
> 
> So Xen needs to check that Stage 1 translation does not generate a fault
> before handling the Stage 2 fault. If it is a Stage 1 translation fault,
> return to the guest to let the processor injecting the correct fault.
> 
> Only document it as this is already the behavior of the fault handlers.
> Note that some optimization could be done to avoid unecessary translation
> fault. This is because HPFAR_EL2 is valid for more use case. For the moment,
> the code is left unmodified.
> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
> ---
>  docs/misc/arm/silicon-errata.txt |  1 +
>  xen/arch/arm/traps.c             | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 31 insertions(+)
> 
> diff --git a/docs/misc/arm/silicon-errata.txt 
> b/docs/misc/arm/silicon-errata.txt
> index ab2e5bc..1ac365d 100644
> --- a/docs/misc/arm/silicon-errata.txt
> +++ b/docs/misc/arm/silicon-errata.txt
> @@ -47,3 +47,4 @@ stable hypervisors.
>  | ARM            | Cortex-A53      | #819472         | ARM64_ERRATUM_819472  
>   |
>  | ARM            | Cortex-A57      | #852523         | N/A                   
>   |
>  | ARM            | Cortex-A57      | #832075         | ARM64_ERRATUM_832075  
>   |
> +| ARM            | Cortex-A57      | #834220         | N/A                   
>   |
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index 3acdba0..bbd5309 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -2396,6 +2396,21 @@ static void do_trap_instr_abort_guest(struct 
> cpu_user_regs *regs,
>              .kind = hsr.iabt.s1ptw ? npfec_kind_in_gpt : npfec_kind_with_gla
>          };
>  
> +        /*
> +         * Erratum #834220: The processor may report a Stage 2
> +         * translation fault as the result of Stage 1 fault for load
> +         * crossing a page boundary when there is a permission fault or
> +         * device memory alignment fault at Stage 1 and a translation
> +         * fault at Stage 2.
> +         *
> +         * So Xen needs to check that the Stage 1 translation does not
> +         * generate a fault before handling stage 2 fault. If it is a Stage
> +         * 1 translation fault, return to the guest to let the processor
> +         * injecting the correct fault.
> +         *
> +         * XXX: This can be optimized to avoid some unecessary
> +         * translation.
> +         */
>          if ( hsr.iabt.s1ptw )
>              gpa = get_faulting_ipa();
>          else

Please write the comment only once, maybe in do_trap_hypervisor before
the calls to do_trap_instr_abort_guest and do_trap_data_abort_guest.


> @@ -2445,6 +2460,21 @@ static void do_trap_data_abort_guest(struct 
> cpu_user_regs *regs,
>      info.gva = READ_SYSREG64(FAR_EL2);
>  #endif
>  
> +    /*
> +     * Erratum #834220: The processor may report a Stage 2
> +     * translation fault as the result of Stage 1 fault for load
> +     * crossing a page boundary when there is a permission fault or
> +     * device memory alignment fault at Stage 1 and a translation
> +     * fault at Stage 2.
> +     *
> +     * So Xen needs to check that the Stage 1 translation does not
> +     * generate a fault before handling stage 2 fault. If it is a Stage
> +     * 1 translation fault, return to the guest to let the processor
> +     * injecting the correct fault.
> +     *
> +     * XXX: This can be optimized to avoid some unecessary
> +     * translation.
> +     */
>      if ( dabt.s1ptw )
>          info.gpa = get_faulting_ipa();
>      else
> -- 
> 1.9.1
> 

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

 


Rackspace

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