Browse Source

ARM: S3C64XX: DMA: Free node for non-circular queues

We need to free the buff and lli nodes if the buffer queue is
not CIRCULAR.

Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Jassi Brar 15 years ago
parent
commit
336b1a3181
1 changed files with 6 additions and 0 deletions
  1. 6 0
      arch/arm/plat-s3c64xx/dma.c

+ 6 - 0
arch/arm/plat-s3c64xx/dma.c

@@ -610,6 +610,12 @@ static irqreturn_t s3c64xx_dma_irq(int irq, void *pw)
 
 
 		s3c64xx_dma_bufffdone(chan, buff, res);
 		s3c64xx_dma_bufffdone(chan, buff, res);
 
 
+		/* Free the node and update curr, if non-circular queue */
+		if (!(chan->flags & S3C2410_DMAF_CIRCULAR)) {
+			chan->curr = buff->next;
+			s3c64xx_dma_freebuff(buff);
+		}
+
 		/* Update 'next' */
 		/* Update 'next' */
 		buff = chan->next;
 		buff = chan->next;
 		if (chan->next == chan->end) {
 		if (chan->next == chan->end) {