Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76bd061f authored by Steven J. Magnani's avatar Steven J. Magnani Committed by Dan Williams
Browse files

fsldma: Fix cookie issues



fsl_dma_update_completed_cookie() appears to calculate the last completed
cookie incorrectly in the corner case where DMA on cookie 1 is in progress
just following a cookie wrap.

Signed-off-by: default avatarSteven J. Magnani <steve@digidescorp.com>
Acked-by: default avatarIra W. Snyder <iws@ovro.caltech.edu>
[dan.j.williams@intel.com: fix an integer overflow warning with INT_MAX]
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 6ca3a7a9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -819,8 +819,11 @@ static void fsl_dma_update_completed_cookie(struct fsldma_chan *chan)
	desc = to_fsl_desc(chan->ld_running.prev);
	if (dma_is_idle(chan))
		cookie = desc->async_tx.cookie;
	else
	else {
		cookie = desc->async_tx.cookie - 1;
		if (unlikely(cookie < DMA_MIN_COOKIE))
			cookie = DMA_MAX_COOKIE;
	}

	chan->completed_cookie = cookie;

+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@
 * if dma_cookie_t is >0 it's a DMA request cookie, <0 it's an error code
 */
typedef s32 dma_cookie_t;
#define DMA_MIN_COOKIE	1
#define DMA_MAX_COOKIE	INT_MAX

#define dma_submit_error(cookie) ((cookie) < 0 ? 1 : 0)