RE: [PATCH] ARM OMAP: Fix race in OMAP2/3 DMA IRQ handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: linux-omap-owner@xxxxxxxxxxxxxxx 
> [mailto:linux-omap-owner@xxxxxxxxxxxxxxx] On Behalf Of Juha Yrjölä
> Sent: Wednesday, January 21, 2009 10:54 PM
> To: linux-omap@xxxxxxxxxxxxxxx
> Subject: [PATCH] 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@xxxxxxxxxxxxx>
> ---
>  arch/arm/plat-omap/dma.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
> index 8e6475d..265351b 100755
> --- a/arch/arm/plat-omap/dma.c
> +++ b/arch/arm/plat-omap/dma.c
> @@ -1898,11 +1898,11 @@ static int omap2_dma_handle_ch(int ch)
>  		status = dma_read(CSR(ch));
>  	}
>  
> +	dma_write(status, CSR(ch));
This is not necessary. Refers line "dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(ch));" just above.

It will any way do the job of clearing. In a way, clear done after the callback has no effect since the status reg and global IRQ_enable for the particular channel is already disabled before that.
> +
>  	if (likely(dma_chan[ch].callback != NULL))
>  		dma_chan[ch].callback(ch, status, dma_chan[ch].data);
>  
> -	dma_write(status, CSR(ch));
> -
>  	return 0;
>  }
>  
> -- 

So dma library is safe from the problem you have described.
> 
> --
> 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
> 
Regards,
Santosh
--
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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux