dmaengine: edma: Use vchan_terminate_vdesc() instead of desc_free

To avoid race with vchan_complete, use the race free way to terminate
running transfer.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
Peter Ujfalusi 2017-11-14 16:32:06 +02:00 committed by Vinod Koul
parent b1faf0f564
commit 174334bcd9

View File

@ -860,11 +860,8 @@ static int edma_terminate_all(struct dma_chan *chan)
/* Move the cyclic channel back to default queue */ /* Move the cyclic channel back to default queue */
if (!echan->tc && echan->edesc->cyclic) if (!echan->tc && echan->edesc->cyclic)
edma_assign_channel_eventq(echan, EVENTQ_DEFAULT); edma_assign_channel_eventq(echan, EVENTQ_DEFAULT);
/*
* free the running request descriptor vchan_terminate_vdesc(&echan->edesc->vdesc);
* since it is not in any of the vdesc lists
*/
edma_desc_free(&echan->edesc->vdesc);
echan->edesc = NULL; echan->edesc = NULL;
} }