Commit 177360e0 authored by Tomasz Moń's avatar Tomasz Moń Committed by Vinod Koul
Browse files

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: default avatarTomasz Moń <tomasz.mon@camlingroup.com>
Link: https://lore.kernel.org/r/20220117091955.1038937-2-tomasz.mon@camlingroup.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 5b215c28
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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;
	}