Просмотр исходного кода

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>
Juha Yrjola 16 лет назад
Родитель
Сommit
320ce6f6fb
1 измененных файлов с 2 добавлено и 2 удалено
  1. 2 2
      arch/arm/plat-omap/dma.c

+ 2 - 2
arch/arm/plat-omap/dma.c

@@ -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;
 }
 }