[PATCH X/Y/Z SRU] powerpc/mm: Add missing global TLB invalidate if cxl is active
Colin Ian King
colin.king at canonical.com
Wed Apr 12 12:10:49 UTC 2017
On 12/04/17 12:57, Tim Gardner wrote:
> From: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1681469
>
> Commit 4c6d9acce1f4 ("powerpc/mm: Add hooks for cxl") converted local
> TLB invalidates to global if the cxl driver is active. This is necessary
> because the CAPP snoops invalidations to forward them to the PSL on the
> cxl adapter. However one path was forgotten. native_flush_hash_range()
> still does local TLB invalidates, 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 TLB invalidates are 'upgraded' to
> global.
>
> Fixes: 4c6d9acce1f4 ("powerpc/mm: Add hooks for cxl")
> Cc: stable at vger.kernel.org # v3.18+
> Signed-off-by: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
> Reviewed-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> (cherry picked from commit 88b1bf7268f56887ca88eb09c6fb0f4fc970121a)
> Signed-off-by: Tim Gardner <tim.gardner at canonical.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];
>
Upstream cherry pick, make sense with respect to commit message and
reference to 4c6d9acce1f4 and is a stable fix, so...
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the kernel-team
mailing list