[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] target/ppc: Fix tlbie
From: |
Fabiano Rosas |
Subject: |
Re: [PATCH] target/ppc: Fix tlbie |
Date: |
Fri, 13 May 2022 14:12:06 -0300 |
Leandro Lupori <leandro.lupori@eldorado.org.br> writes:
> Commit 74c4912f097bab98 changed check_tlb_flush() to use
> tlb_flush_all_cpus_synced() instead of calling tlb_flush() on each
> CPU. However, as side effect of this, a CPU executing a ptesync
> after a tlbie will have its TLB flushed only after exiting its
> current Translation Block (TB).
>
> This causes memory accesses to invalid pages to succeed, if they
> happen to be on the same TB as the ptesync.
>
> To fix this, use tlb_flush_all_cpus() instead, that immediately
> flushes the TLB of the CPU executing the ptesync instruction.
>
> Fixes: 74c4912f097bab98 ("target/ppc: Fix synchronization of mttcg with
> broadcast TLB flushes")
> Signed-off-by: Leandro Lupori <leandro.lupori@eldorado.org.br>
Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
> ---
> target/ppc/helper_regs.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c
> index 9a691d6833..1fa032e4d0 100644
> --- a/target/ppc/helper_regs.c
> +++ b/target/ppc/helper_regs.c
> @@ -293,7 +293,7 @@ void check_tlb_flush(CPUPPCState *env, bool global)
> if (global && (env->tlb_need_flush & TLB_NEED_GLOBAL_FLUSH)) {
> env->tlb_need_flush &= ~TLB_NEED_GLOBAL_FLUSH;
> env->tlb_need_flush &= ~TLB_NEED_LOCAL_FLUSH;
> - tlb_flush_all_cpus_synced(cs);
> + tlb_flush_all_cpus(cs);
> return;
> }