ARM: S3C64XX: DMA: Free node for non-circular queues
authorJassi Brar <jassi.brar@samsung.com>
Thu, 5 Nov 2009 04:44:39 +0000 (13:44 +0900)
committerBen Dooks <ben-linux@fluff.org>
Mon, 9 Nov 2009 23:51:19 +0000 (23:51 +0000)
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>
arch/arm/plat-s3c64xx/dma.c

index 7d12eb8fa58dc36a41176d80ffd2c93b1ecd5b0e..d554b936fcfb38fb4aca764cbcc6e33049976610 100644 (file)
@@ -610,6 +610,12 @@ static irqreturn_t s3c64xx_dma_irq(int irq, void *pw)
 
                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' */
                buff = chan->next;
                if (chan->next == chan->end) {