dmaengine: bcm2835: do not call vchan_vdesc_fini() with lock held
authorSascha Hauer <s.hauer@pengutronix.de>
Mon, 16 Dec 2019 10:53:20 +0000 (11:53 +0100)
committerVinod Koul <vkoul@kernel.org>
Thu, 26 Dec 2019 04:34:18 +0000 (10:04 +0530)
vchan_vdesc_fini() can't be called locked. Instead, call
vchan_terminate_vdesc() which delays the freeing of the descriptor to
vchan_synchronize().

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Link: https://lore.kernel.org/r/20191216105328.15198-2-s.hauer@pengutronix.de
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/bcm2835-dma.c

index e4c593f..4768ef2 100644 (file)
@@ -797,10 +797,7 @@ static int bcm2835_dma_terminate_all(struct dma_chan *chan)
 
        /* stop DMA activity */
        if (c->desc) {
-               if (c->desc->vd.tx.flags & DMA_PREP_INTERRUPT)
-                       vchan_terminate_vdesc(&c->desc->vd);
-               else
-                       vchan_vdesc_fini(&c->desc->vd);
+               vchan_terminate_vdesc(&c->desc->vd);
                c->desc = NULL;
                bcm2835_dma_abort(c);
        }