From: Juha Yrjola Date: Thu, 29 Jan 2009 16:57:12 +0000 (-0800) Subject: ARM: OMAP: Fix race in OMAP2/3 DMA IRQ handling X-Git-Tag: upstream/snapshot3+hdmi~20354^2^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=320ce6f6fb3d95e02a183709e51d8a16a8b00e0a;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git ARM: OMAP: Fix race in OMAP2/3 DMA IRQ handling CSR must be cleared before invoking the callback. If the callback function starts a new, fast DMA transfer on the same channel, the completion status might lost if CSR is cleared after the callback invocation. Signed-off-by: Juha Yrjola Signed-off-by: Tony Lindgren --- diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index e77373c..bec8e36 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -1888,11 +1888,11 @@ static int omap2_dma_handle_ch(int ch) status = dma_read(CSR(ch)); } + dma_write(status, CSR(ch)); + if (likely(dma_chan[ch].callback != NULL)) dma_chan[ch].callback(ch, status, dma_chan[ch].data); - dma_write(status, CSR(ch)); - return 0; }