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 <juha.yrjola@solidboot.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
06151158f2
commit
320ce6f6fb
1 changed files with 2 additions and 2 deletions
|
@ -1888,11 +1888,11 @@ static int omap2_dma_handle_ch(int ch)
|
||||||
status = dma_read(CSR(ch));
|
status = dma_read(CSR(ch));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dma_write(status, CSR(ch));
|
||||||
|
|
||||||
if (likely(dma_chan[ch].callback != NULL))
|
if (likely(dma_chan[ch].callback != NULL))
|
||||||
dma_chan[ch].callback(ch, status, dma_chan[ch].data);
|
dma_chan[ch].callback(ch, status, dma_chan[ch].data);
|
||||||
|
|
||||||
dma_write(status, CSR(ch));
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue