From: Jassi Brar Date: Thu, 5 Nov 2009 04:44:20 +0000 (+0900) Subject: ARM: S3C64XX: DMA: Protect buffer pointers while manipulation X-Git-Tag: v2.6.32-rc7~51^2^2~4 X-Git-Url: http://ftp.safe.ca/?a=commitdiff_plain;h=210012a6cd8770a73d1aa74b742667b462d04511;p=safe%2Fjmp%2Flinux-2.6 ARM: S3C64XX: DMA: Protect buffer pointers while manipulation Ensure the DMA buffer points are not updated from another source during the process of enquing a buffer. Signed-off-by: Jassi Brar [ben-linux@fluff.org: Updated patch comment] Signed-off-by: Ben Dooks --- diff --git a/arch/arm/plat-s3c64xx/dma.c b/arch/arm/plat-s3c64xx/dma.c index 266a107..6fa706f 100644 --- a/arch/arm/plat-s3c64xx/dma.c +++ b/arch/arm/plat-s3c64xx/dma.c @@ -339,6 +339,7 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, struct s3c64xx_dma_buff *next; struct s3c64xx_dma_buff *buff; struct pl080s_lli *lli; + unsigned long flags; int ret; WARN_ON(!chan); @@ -366,6 +367,8 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, s3c64xx_dma_fill_lli(chan, lli, data, size); + local_irq_save(flags); + if ((next = chan->next) != NULL) { struct s3c64xx_dma_buff *end = chan->end; struct pl080s_lli *endlli = end->lli; @@ -397,6 +400,8 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, s3c64xx_lli_to_regs(chan, lli); } + local_irq_restore(flags); + show_lli(lli); dbg_showchan(chan);