[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, 30 May 2016, Julien Grall wrote:
> Hi Stefano,
> 
> On 30/05/2016 16:11, Stefano Stabellini wrote:
> > 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.
> 
> I wrote this comment at these two specific places because developers and
> reviewers can spot directly that the code has been written in a specific way
> to avoid an erratum.
> 
> If we happen to fix one place and not the other, the comment would still be
> there. do_trap_hypervisor would be the wrong place for this comment because it
> is "far away" in the code and will be less likely read.
> 
> I can shrink down the message. What about:
> 
> "Erratum #834220: 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 project injecting the correct fault.
> 
> XXX: This can be optimized to avoid some unnecessary translation."

What about adding a lengthy and detailed description of the erratum
elsewhere and just having a one liner at the call sites, such as:

/* Erratum #834220: check Stage1 translation does not generate faults first! */

so that developers can easily grep for #834220 through the code to have
the full explanation?

_______________________________________________
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®.