Frederic Barrat <fbar...@linux.vnet.ibm.com> writes:

> Commit 4c6d9acce1f4 ("powerpc/mm: Add hooks for cxl") converted local
> TLBIs to global if the cxl driver is active. It is necessary because
> the CAPP snoops invalidations to forward them to the PSL on the cxl
> adapter.
> However one path was apparently forgotten. native_flush_hash_range()
> still sends local TLBIs, as found out the hard way recently.
>
> This patch fixes it by following the same logic as previously: if the
> cxl driver is active, the local TLBIs are 'upgraded' to global.
>
> Fixes: 4c6d9acce1f4 ("powerpc/mm: Add hooks for cxl")
> Cc: sta...@vger.kernel.org
> Signed-off-by: Frederic Barrat <fbar...@linux.vnet.ibm.com>

Reviewed-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>

> ---
>  arch/powerpc/mm/hash_native_64.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/powerpc/mm/hash_native_64.c 
> b/arch/powerpc/mm/hash_native_64.c
> index cc33260..65bb8f3 100644
> --- a/arch/powerpc/mm/hash_native_64.c
> +++ b/arch/powerpc/mm/hash_native_64.c
> @@ -638,6 +638,10 @@ static void native_flush_hash_range(unsigned long 
> number, int local)
>       unsigned long psize = batch->psize;
>       int ssize = batch->ssize;
>       int i;
> +     unsigned int use_local;
> +
> +     use_local = local && mmu_has_feature(MMU_FTR_TLBIEL) &&
> +             mmu_psize_defs[psize].tlbiel && !cxl_ctx_in_use();
>
>       local_irq_save(flags);
>
> @@ -667,8 +671,7 @@ static void native_flush_hash_range(unsigned long number, 
> int local)
>               } pte_iterate_hashed_end();
>       }
>
> -     if (mmu_has_feature(MMU_FTR_TLBIEL) &&
> -         mmu_psize_defs[psize].tlbiel && local) {
> +     if (use_local) {
>               asm volatile("ptesync":::"memory");
>               for (i = 0; i < number; i++) {
>                       vpn = batch->vpn[i];
> -- 
> 2.9.3

Reply via email to