Commit 210012a6 authored by Jassi Brar's avatar Jassi Brar Committed by Ben Dooks

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: default avatarJassi Brar <jassi.brar@samsung.com>
[ben-linux@fluff.org: Updated patch comment]
Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent 799dd75b
...@@ -339,6 +339,7 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, ...@@ -339,6 +339,7 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
struct s3c64xx_dma_buff *next; struct s3c64xx_dma_buff *next;
struct s3c64xx_dma_buff *buff; struct s3c64xx_dma_buff *buff;
struct pl080s_lli *lli; struct pl080s_lli *lli;
unsigned long flags;
int ret; int ret;
WARN_ON(!chan); WARN_ON(!chan);
...@@ -366,6 +367,8 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, ...@@ -366,6 +367,8 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
s3c64xx_dma_fill_lli(chan, lli, data, size); s3c64xx_dma_fill_lli(chan, lli, data, size);
local_irq_save(flags);
if ((next = chan->next) != NULL) { if ((next = chan->next) != NULL) {
struct s3c64xx_dma_buff *end = chan->end; struct s3c64xx_dma_buff *end = chan->end;
struct pl080s_lli *endlli = end->lli; struct pl080s_lli *endlli = end->lli;
...@@ -397,6 +400,8 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, ...@@ -397,6 +400,8 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
s3c64xx_lli_to_regs(chan, lli); s3c64xx_lli_to_regs(chan, lli);
} }
local_irq_restore(flags);
show_lli(lli); show_lli(lli);
dbg_showchan(chan); dbg_showchan(chan);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment