Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bab9f954 authored by Alistair Popple's avatar Alistair Popple Committed by Michael Ellerman
Browse files

powerpc/powernv/npu: Move tlb flush before launching ATSD



The nest MMU tlb flush needs to happen before the GPU translation
shootdown is launched to avoid the GPU refilling its tlb with stale
nmmu translations prior to the nmmu flush completing.

Fixes: 1ab66d1f ("powerpc/powernv: Introduce address translation services for Nvlink2")
Cc: stable@vger.kernel.org # v4.12+
Signed-off-by: default avatarAlistair Popple <alistair@popple.id.au>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent de854e54
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -545,6 +545,12 @@ static void mmio_invalidate(struct npu_context *npu_context, int va,
	struct mmio_atsd_reg mmio_atsd_reg[NV_MAX_NPUS];
	unsigned long pid = npu_context->mm->context.id;

	/*
	 * Unfortunately the nest mmu does not support flushing specific
	 * addresses so we have to flush the whole mm.
	 */
	flush_tlb_mm(npu_context->mm);

	/*
	 * Loop over all the NPUs this process is active on and launch
	 * an invalidate.
@@ -576,12 +582,6 @@ static void mmio_invalidate(struct npu_context *npu_context, int va,
		}
	}

	/*
	 * Unfortunately the nest mmu does not support flushing specific
	 * addresses so we have to flush the whole mm.
	 */
	flush_tlb_mm(npu_context->mm);

	mmio_invalidate_wait(mmio_atsd_reg, flush);
	if (flush)
		/* Wait for the flush to complete */