]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
dmaengine: rcar-dmac: Fix uninitialized variable usage
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Thu, 8 Jan 2015 16:29:25 +0000 (18:29 +0200)
committerVinod Koul <vinod.koul@intel.com>
Thu, 12 Feb 2015 07:22:19 +0000 (12:52 +0530)
The desc variable is used uninitialized in the rcar_dmac_desc_get() and
rcar_dmac_xfer_chunk_get() functions if descriptors need to be
allocated. Fix it.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/sh/rcar-dmac.c

index 29dd09ad41ff292c8084a33f49e06a47117c04f8..8367578bac638dd1ada2ccb40dba9444ca5cce6d 100644 (file)
@@ -549,26 +549,22 @@ static struct rcar_dmac_desc *rcar_dmac_desc_get(struct rcar_dmac_chan *chan)
 
        spin_lock_irq(&chan->lock);
 
-       do {
-               if (list_empty(&chan->desc.free)) {
-                       /*
-                        * No free descriptors, allocate a page worth of them
-                        * and try again, as someone else could race us to get
-                        * the newly allocated descriptors. If the allocation
-                        * fails return an error.
-                        */
-                       spin_unlock_irq(&chan->lock);
-                       ret = rcar_dmac_desc_alloc(chan, GFP_NOWAIT);
-                       if (ret < 0)
-                               return NULL;
-                       spin_lock_irq(&chan->lock);
-                       continue;
-               }
+       while (list_empty(&chan->desc.free)) {
+               /*
+                * No free descriptors, allocate a page worth of them and try
+                * again, as someone else could race us to get the newly
+                * allocated descriptors. If the allocation fails return an
+                * error.
+                */
+               spin_unlock_irq(&chan->lock);
+               ret = rcar_dmac_desc_alloc(chan, GFP_NOWAIT);
+               if (ret < 0)
+                       return NULL;
+               spin_lock_irq(&chan->lock);
+       }
 
-               desc = list_first_entry(&chan->desc.free, struct rcar_dmac_desc,
-                                       node);
-               list_del(&desc->node);
-       } while (!desc);
+       desc = list_first_entry(&chan->desc.free, struct rcar_dmac_desc, node);
+       list_del(&desc->node);
 
        spin_unlock_irq(&chan->lock);
 
@@ -621,26 +617,23 @@ rcar_dmac_xfer_chunk_get(struct rcar_dmac_chan *chan)
 
        spin_lock_irq(&chan->lock);
 
-       do {
-               if (list_empty(&chan->desc.chunks_free)) {
-                       /*
-                        * No free descriptors, allocate a page worth of them
-                        * and try again, as someone else could race us to get
-                        * the newly allocated descriptors. If the allocation
-                        * fails return an error.
-                        */
-                       spin_unlock_irq(&chan->lock);
-                       ret = rcar_dmac_xfer_chunk_alloc(chan, GFP_NOWAIT);
-                       if (ret < 0)
-                               return NULL;
-                       spin_lock_irq(&chan->lock);
-                       continue;
-               }
+       while (list_empty(&chan->desc.chunks_free)) {
+               /*
+                * No free descriptors, allocate a page worth of them and try
+                * again, as someone else could race us to get the newly
+                * allocated descriptors. If the allocation fails return an
+                * error.
+                */
+               spin_unlock_irq(&chan->lock);
+               ret = rcar_dmac_xfer_chunk_alloc(chan, GFP_NOWAIT);
+               if (ret < 0)
+                       return NULL;
+               spin_lock_irq(&chan->lock);
+       }
 
-               chunk = list_first_entry(&chan->desc.chunks_free,
-                                         struct rcar_dmac_xfer_chunk, node);
-               list_del(&chunk->node);
-       } while (!chunk);
+       chunk = list_first_entry(&chan->desc.chunks_free,
+                                struct rcar_dmac_xfer_chunk, node);
+       list_del(&chunk->node);
 
        spin_unlock_irq(&chan->lock);