Patch "dmaengine: amba-pl08x: Use vchan_terminate_vdesc() instead of desc_free" has been added to the 4.15-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
dmaengine: amba-pl08x: Use vchan_terminate_vdesc() instead of desc_free
to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
dmaengine-amba-pl08x-use-vchan_terminate_vdesc-instead-of-desc_free.patch
and it can be found in the queue-4.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Fri Mar 16 15:11:07 CET 2018
From: Peter Ujfalusi <[email protected]>
Date: Tue, 14 Nov 2017 16:32:09 +0200
Subject: dmaengine: amba-pl08x: Use vchan_terminate_vdesc() instead of desc_free
From: Peter Ujfalusi <[email protected]>
[ Upstream commit 47d71bc75d072ce25c1063aa629e55e1cfb961b2 ]
To avoid race with vchan_complete, use the race free way to terminate running transfer.
Implement the device_synchronize callback to make sure that the terminated descriptor is freed.
--- drivers/dma/amba-pl08x.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/dma/amba-pl08x.c +10 -1
@@ -2182,7 +2182,7 @@ static int pl08x_terminate_all(struct dm }/* Dequeue jobs and free LLIs */ if (plchan->at) { -pl08x_desc_free (&plchan->at->vd); +vchan_terminate_vdesc (&plchan->at->vd); plchan->at =NULL ; }/* Dequeue jobs not yet fired as well */
@@ -2193,6 +2193,13 @@ static int pl08x_terminate_all(struct dmreturn 0 ; } +static void pl08x_synchronize (struct dma_chan *chan) +{ +struct pl08x_dma_chan *plchan =to_pl08x_chan (chan); + +vchan_synchronize (&plchan->vc); +} +static int pl08x_pause (struct dma_chan *chan) {struct pl08x_dma_chan *plchan =to_pl08x_chan (chan);
@@ -2773,6 +2780,7 @@ static int pl08x_probe(struct amba_devic pl08x->memcpy.device_pause = pl08x_pause; pl08x->memcpy.device_resume = pl08x_resume; pl08x->memcpy.device_terminate_all = pl08x_terminate_all; + pl08x->memcpy.device_synchronize = pl08x_synchronize; pl08x->memcpy.src_addr_widths =PL80X_DMA_BUSWIDTHS ; pl08x->memcpy.dst_addr_widths =PL80X_DMA_BUSWIDTHS ; pl08x->memcpy.directions =BIT (DMA_MEM_TO_MEM );
@@ -2802,6 +2810,7 @@ static int pl08x_probe(struct amba_devic pl08x->slave.device_pause = pl08x_pause; pl08x->slave.device_resume = pl08x_resume; pl08x->slave.device_terminate_all = pl08x_terminate_all; + pl08x->slave.device_synchronize = pl08x_synchronize; pl08x->slave.src_addr_widths =PL80X_DMA_BUSWIDTHS ; pl08x->slave.dst_addr_widths =PL80X_DMA_BUSWIDTHS ; pl08x->slave.directions =
Patches currently in stable-queue which might be from [email protected] are
queue-4.15/dmaengine-bcm2835-dma-use-vchan_terminate_vdesc-instead-of-desc_free.patch queue-4.15/dmaengine-amba-pl08x-use-vchan_terminate_vdesc-instead-of-desc_free.patch