On Thu May 2, 2024 at 9:43 AM AEST, BALATON Zoltan wrote:
> In mmubooke206_check_tlb() prot2 is calculated first but only used
> after an unrelated check that can return before tha value is used.
> Move the calculation after the check, closer to where it is used, to
> keep them together and avoid computing it when not needed.
>
> Signed-off-by: BALATON Zoltan <bala...@eik.bme.hu>

Reviwed-by: Nicholas Piggin <npig...@gmail.com>

> ---
>  target/ppc/mmu_common.c | 25 ++++++++++++-------------
>  1 file changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/target/ppc/mmu_common.c b/target/ppc/mmu_common.c
> index 168ff842a5..b0aca8ec02 100644
> --- a/target/ppc/mmu_common.c
> +++ b/target/ppc/mmu_common.c
> @@ -828,6 +828,18 @@ static int mmubooke206_check_tlb(CPUPPCState *env, 
> ppcmas_tlb_t *tlb,
>  
>  found_tlb:
>  
> +    /* Check the address space and permissions */
> +    if (access_type == MMU_INST_FETCH) {
> +        /* There is no way to fetch code using epid load */
> +        assert(!use_epid);
> +        as = FIELD_EX64(env->msr, MSR, IR);
> +    }
> +
> +    if (as != ((tlb->mas1 & MAS1_TS) >> MAS1_TS_SHIFT)) {
> +        qemu_log_mask(CPU_LOG_MMU, "%s: AS doesn't match\n", __func__);
> +        return -1;
> +    }
> +
>      if (pr) {
>          if (tlb->mas7_3 & MAS3_UR) {
>              prot2 |= PAGE_READ;
> @@ -849,19 +861,6 @@ found_tlb:
>              prot2 |= PAGE_EXEC;
>          }
>      }
> -
> -    /* Check the address space and permissions */
> -    if (access_type == MMU_INST_FETCH) {
> -        /* There is no way to fetch code using epid load */
> -        assert(!use_epid);
> -        as = FIELD_EX64(env->msr, MSR, IR);
> -    }
> -
> -    if (as != ((tlb->mas1 & MAS1_TS) >> MAS1_TS_SHIFT)) {
> -        qemu_log_mask(CPU_LOG_MMU, "%s: AS doesn't match\n", __func__);
> -        return -1;
> -    }
> -
>      *prot = prot2;
>      if (prot2 & prot_for_access_type(access_type)) {
>          qemu_log_mask(CPU_LOG_MMU, "%s: good TLB!\n", __func__);


Reply via email to