>From a36dac7ee6140ffa23f0adc024964aaf3e266e5f Mon Sep 17 00:00:00 2001 From: Tao Hu <taohu@xxxxxxxxxxxx> Date: Thu, 29 Oct 2009 17:17:21 -0500 Subject: [PATCH] Fix race condition in omap_request_dma() The bug could cause irq enable bit of one DMA channel is cleared unexpectedly when 2 (or more) drivers are calling omap_request_dma() simultaneously Signed-off-by: Fei Yang <AFY095@xxxxxxxxxxxx> Signed-off-by: Tao Hu <taohu@xxxxxxxxxxxx> --- arch/arm/plat-omap/dma.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index cd53b28..6895484 100755 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -749,11 +749,13 @@ int omap_request_dma(int dev_id, const char *dev_name, } if (cpu_class_is_omap2()) { + spin_lock_irqsave(&dma_chan_lock, flags); omap2_enable_irq_lch(free_ch); omap_enable_channel_irq(free_ch); /* Clear the CSR register and IRQ status register */ dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(free_ch)); dma_write(1 << free_ch, IRQSTATUS_L0); + spin_unlock_irqrestore(&dma_chan_lock, flags); } *dma_ch_out = free_ch; -- 1.5.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html