Skip to content

Commit

Permalink
dmaengine: rcar-dmac: Fix uninitialized variable usage
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Laurent Pinchart authored and Vinod Koul committed Feb 12, 2015
1 parent bf44a41 commit a55e07c
Showing 1 changed file with 31 additions and 38 deletions.
69 changes: 31 additions & 38 deletions drivers/dma/sh/rcar-dmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit a55e07c

Please sign in to comment.