[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 3/3] target/arm: Ignore HCR_EL2.ATA when {E2H,TGE} != 11
From: |
Vincenzo Frascino |
Subject: |
Re: [PATCH 3/3] target/arm: Ignore HCR_EL2.ATA when {E2H,TGE} != 11 |
Date: |
Fri, 9 Oct 2020 12:10:47 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 |
On 10/8/20 5:21 PM, Richard Henderson wrote:
> Unlike many other bits in HCR_EL2, the description for this
> bit does not contain the phrase "if ... this field behaves
> as 0 for all purposes other than", so do not squash the bit
> in arm_hcr_el2_eff.
>
> Instead, replicate the E2H+TGE test in the two places that
> require it.
>
> Reported-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Tested-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
> ---
> target/arm/internals.h | 9 +++++----
> target/arm/helper.c | 9 +++++----
> 2 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/target/arm/internals.h b/target/arm/internals.h
> index ae99725d2b..5460678756 100644
> --- a/target/arm/internals.h
> +++ b/target/arm/internals.h
> @@ -1252,10 +1252,11 @@ static inline bool
> allocation_tag_access_enabled(CPUARMState *env, int el,
> && !(env->cp15.scr_el3 & SCR_ATA)) {
> return false;
> }
> - if (el < 2
> - && arm_feature(env, ARM_FEATURE_EL2)
> - && !(arm_hcr_el2_eff(env) & HCR_ATA)) {
> - return false;
> + if (el < 2 && arm_feature(env, ARM_FEATURE_EL2)) {
> + uint64_t hcr = arm_hcr_el2_eff(env);
> + if (!(hcr & HCR_ATA) && (!(hcr & HCR_E2H) || !(hcr & HCR_TGE))) {
> + return false;
> + }
> }
> sctlr &= (el == 0 ? SCTLR_ATA0 : SCTLR_ATA);
> return sctlr != 0;
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index cd0779ff5f..0620572e44 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -6874,10 +6874,11 @@ static CPAccessResult access_mte(CPUARMState *env,
> const ARMCPRegInfo *ri,
> {
> int el = arm_current_el(env);
>
> - if (el < 2 &&
> - arm_feature(env, ARM_FEATURE_EL2) &&
> - !(arm_hcr_el2_eff(env) & HCR_ATA)) {
> - return CP_ACCESS_TRAP_EL2;
> + if (el < 2 && arm_feature(env, ARM_FEATURE_EL2)) {
> + uint64_t hcr = arm_hcr_el2_eff(env);
> + if (!(hcr & HCR_ATA) && (!(hcr & HCR_E2H) || !(hcr & HCR_TGE))) {
> + return CP_ACCESS_TRAP_EL2;
> + }
> }
> if (el < 3 &&
> arm_feature(env, ARM_FEATURE_EL3) &&
>
--
Regards,
Vincenzo
- [PATCH 0/3] target/arm: MTE fixes, Richard Henderson, 2020/10/08
- [PATCH 3/3] target/arm: Ignore HCR_EL2.ATA when {E2H,TGE} != 11, Richard Henderson, 2020/10/08
- Re: [PATCH 3/3] target/arm: Ignore HCR_EL2.ATA when {E2H,TGE} != 11,
Vincenzo Frascino <=
- [PATCH 2/3] target/arm: Fix reported EL for mte_check_fail, Richard Henderson, 2020/10/08
- [PATCH 1/3] target/arm: Remove redundant mmu_idx lookup, Richard Henderson, 2020/10/08
- Re: [PATCH 0/3] target/arm: MTE fixes, Vincenzo Frascino, 2020/10/09
- Re: [PATCH 0/3] target/arm: MTE fixes, Peter Maydell, 2020/10/20