mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 13:57:54 -04:00
dmaengine: imx-sdma: fix cyclic buffer race condition
Assign buffer ownership to SDMA after invoking descriptor callback to make sure that SDMA does not write to the buffer before it is read by the CPU. Signed-off-by: Tomasz Moń <tomasz.mon@camlingroup.com> Link: https://lore.kernel.org/r/20220117091955.1038937-2-tomasz.mon@camlingroup.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
@@ -847,7 +847,6 @@ static void sdma_update_channel_loop(struct sdma_channel *sdmac)
|
||||
*/
|
||||
|
||||
desc->chn_real_count = bd->mode.count;
|
||||
bd->mode.status |= BD_DONE;
|
||||
bd->mode.count = desc->period_len;
|
||||
desc->buf_ptail = desc->buf_tail;
|
||||
desc->buf_tail = (desc->buf_tail + 1) % desc->num_bd;
|
||||
@@ -862,6 +861,9 @@ static void sdma_update_channel_loop(struct sdma_channel *sdmac)
|
||||
dmaengine_desc_get_callback_invoke(&desc->vd.tx, NULL);
|
||||
spin_lock(&sdmac->vc.lock);
|
||||
|
||||
/* Assign buffer ownership to SDMA */
|
||||
bd->mode.status |= BD_DONE;
|
||||
|
||||
if (error)
|
||||
sdmac->status = old_status;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user