[v3] powerpc/npu-dma.c: Fix deadlock in mmio_invalidate

Michael Ellerman patch-notifications at ellerman.id.au
Wed Mar 14 20:28:21 AEDT 2018

On Fri, 2018-03-02 at 05:18:45 UTC, Alistair Popple wrote:
> When sending TLB invalidates to the NPU we need to send extra flushes due
> to a hardware issue. The original implementation would lock the all the
> ATSD MMIO registers sequentially before unlocking and relocking each of
> them sequentially to do the extra flush.
> This introduced a deadlock as it is possible for one thread to hold one
> ATSD register whilst waiting for another register to be freed while the
> other thread is holding that register waiting for the one in the first
> thread to be freed.
> For example if there are two threads and two ATSD registers:
> Thread A	Thread B
> Acquire 1
> Acquire 2
> Release 1	Acquire 1
> Wait 1		Wait 2
> Both threads will be stuck waiting to acquire a register resulting in an
> RCU stall warning or soft lockup.
> This patch solves the deadlock by refactoring the code to ensure registers
> are not released between flushes and to ensure all registers are either
> acquired or released together and in order.
> Fixes: bbd5ff50afff ("powerpc/powernv/npu-dma: Add explicit flush when sending an ATSD")
> Signed-off-by: Alistair Popple <alistair at popple.id.au>

Applied to powerpc next, thanks.



More information about the Linuxppc-dev mailing list