All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: andre.przywara@arm.com, wei.chen@linaro.org, wei.liu2@citrix.com,
	steve.capper@arm.com, xen-devel@lists.xen.org
Subject: Re: [PATCH v2 15/15] xen/arm: arm64: Document Cortex-A57 erratum 834220
Date: Mon, 30 May 2016 17:15:25 +0100	[thread overview]
Message-ID: <b2fa81bc-6803-f0d5-2f45-2cd95ecff2e9@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1605301610570.3896@sstabellini-ThinkPad-X260>

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@arm.com>
>> ---
>>  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."

Regards,

-- 
Julien Grall

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

  reply	other threads:[~2016-05-30 16:15 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-23 14:17 [PATCH v2 00/15] xen/arm: Introduce alternative runtime patching for ARM64 Julien Grall
2016-05-23 14:17 ` [PATCH v2 01/15] xen/arm: Makefile: Sort the entries alphabetically Julien Grall
2016-05-23 14:17 ` [PATCH v2 02/15] xen/arm: Include the header asm-arm/system.h in asm-arm/page.h Julien Grall
2016-05-23 14:17 ` [PATCH v2 03/15] xen/arm: Add macros to handle the MIDR Julien Grall
2016-05-23 14:17 ` [PATCH v2 04/15] xen/arm: Add cpu_hwcap bitmap Julien Grall
2016-05-30 14:19   ` Stefano Stabellini
2016-05-23 14:17 ` [PATCH v2 05/15] xen/arm64: Add an helper to invalidate all instruction caches Julien Grall
2016-05-23 14:17 ` [PATCH v2 06/15] xen/arm: arm64: Move the define BRK_BUG_FRAME into a separate header Julien Grall
2016-05-23 14:17 ` [PATCH v2 07/15] xen/arm: arm64: Reserve a brk immediate to fault on purpose Julien Grall
2016-05-23 14:17 ` [PATCH v2 08/15] xen/arm: arm64: Add helpers to decode and encode branch instructions Julien Grall
2016-05-30 14:29   ` Stefano Stabellini
2016-05-23 14:17 ` [PATCH v2 09/15] xen/arm: Introduce alternative runtime patching Julien Grall
2016-05-23 14:17 ` [PATCH v2 10/15] xen/arm: Detect silicon revision and set cap bits accordingly Julien Grall
2016-05-30 15:02   ` Stefano Stabellini
2016-05-30 16:37     ` Julien Grall
2016-05-31  9:27       ` Stefano Stabellini
2016-05-31 10:36         ` Julien Grall
2016-06-01  9:46           ` Stefano Stabellini
2016-06-01 12:47             ` Julien Grall
2016-06-02 11:43               ` Julien Grall
2016-06-02 11:45               ` Julien Grall
2016-05-23 14:17 ` [PATCH v2 11/15] xen/arm: Document the errata implemented in Xen Julien Grall
2016-05-23 14:38   ` Andrew Cooper
2016-05-24  9:13     ` Julien Grall
2016-05-30 15:08   ` Stefano Stabellini
2016-05-23 14:17 ` [PATCH v2 12/15] xen/arm: arm64: Add Cortex-A53 cache errata workaround Julien Grall
2016-05-24  2:46   ` Chenxiao Zhao
2016-05-24  8:56     ` Julien Grall
2016-05-23 14:17 ` [PATCH v2 13/15] xen/arm: arm64: Add cortex-A57 erratum 832075 workaround Julien Grall
2016-05-23 14:17 ` [PATCH v2 14/15] xen/arm: traps: Don't inject a fault if the translation VA -> IPA fails Julien Grall
2016-05-30 14:50   ` Stefano Stabellini
2016-05-23 14:17 ` [PATCH v2 15/15] xen/arm: arm64: Document Cortex-A57 erratum 834220 Julien Grall
2016-05-30 15:11   ` Stefano Stabellini
2016-05-30 16:15     ` Julien Grall [this message]
2016-05-30 16:19       ` Stefano Stabellini
2016-05-30 16:33         ` Julien Grall
2016-05-31  9:34           ` Stefano Stabellini
2016-05-31 10:39             ` Julien Grall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b2fa81bc-6803-f0d5-2f45-2cd95ecff2e9@arm.com \
    --to=julien.grall@arm.com \
    --cc=andre.przywara@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=steve.capper@arm.com \
    --cc=wei.chen@linaro.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.