diff options
author | Julia Lawall <julia@diku.dk> | 2009-07-12 09:43:21 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-15 12:01:40 -0700 |
commit | 980fd895e63a831bb8f0db8741a19169d9274c75 (patch) | |
tree | 15a2245bf8ffc27cf6f5f838c14036bc4bbc797c /drivers/staging/b3dfg/b3dfg.c | |
parent | f2eb5197740d5c1c85de8a96111f153c33c4891e (diff) |
Staging: b3dfg: Drop NULL test on list_entry result
list_entry, which is an alias for container_of, cannot return NULL, as
there is no way to add a NULL value to a doubly linked list.
A simplified version of the semantic match that findds this problem is as
follows:
(http://www.emn.fr/x-info/coccinelle/)
// <smpl>
@r@
expression x,E;
statement S1,S2;
position p,p1;
@@
*x = list_entry@p(...)
... when != x = E
*if@p1 (x == NULL) S1 else S2
// </smpl>
Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/b3dfg/b3dfg.c')
-rw-r--r-- | drivers/staging/b3dfg/b3dfg.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/drivers/staging/b3dfg/b3dfg.c b/drivers/staging/b3dfg/b3dfg.c index eec9c99ffaa..94c5d27d24d 100644 --- a/drivers/staging/b3dfg/b3dfg.c +++ b/drivers/staging/b3dfg/b3dfg.c @@ -632,18 +632,15 @@ static void transfer_complete(struct b3dfg_dev *fgdev) fgdev->cur_dma_frame_addr = 0; buf = list_entry(fgdev->buffer_queue.next, struct b3dfg_buffer, list); - if (buf) { - dev_dbg(dev, "handle frame completion\n"); - if (fgdev->cur_dma_frame_idx == B3DFG_FRAMES_PER_BUFFER - 1) { - - /* last frame of that triplet completed */ - dev_dbg(dev, "triplet completed\n"); - buf->state = B3DFG_BUFFER_POPULATED; - list_del_init(&buf->list); - wake_up_interruptible(&fgdev->buffer_waitqueue); - } - } else { - dev_err(dev, "got frame but no buffer!\n"); + + dev_dbg(dev, "handle frame completion\n"); + if (fgdev->cur_dma_frame_idx == B3DFG_FRAMES_PER_BUFFER - 1) { + + /* last frame of that triplet completed */ + dev_dbg(dev, "triplet completed\n"); + buf->state = B3DFG_BUFFER_POPULATED; + list_del_init(&buf->list); + wake_up_interruptible(&fgdev->buffer_waitqueue); } } @@ -663,19 +660,15 @@ static bool setup_next_frame_transfer(struct b3dfg_dev *fgdev, int idx) dev_dbg(dev, "program DMA transfer for next frame: %d\n", idx); buf = list_entry(fgdev->buffer_queue.next, struct b3dfg_buffer, list); - if (buf) { - if (idx == fgdev->cur_dma_frame_idx + 2) { - if (setup_frame_transfer(fgdev, buf, idx - 1)) - dev_err(dev, "unable to map DMA buffer\n"); - need_ack = 0; - } else { - dev_err(dev, "frame mismatch, got %d, expected %d\n", - idx, fgdev->cur_dma_frame_idx + 2); - - /* FIXME: handle dropped triplets here */ - } + if (idx == fgdev->cur_dma_frame_idx + 2) { + if (setup_frame_transfer(fgdev, buf, idx - 1)) + dev_err(dev, "unable to map DMA buffer\n"); + need_ack = 0; } else { - dev_err(dev, "cannot setup DMA, no buffer\n"); + dev_err(dev, "frame mismatch, got %d, expected %d\n", + idx, fgdev->cur_dma_frame_idx + 2); + + /* FIXME: handle dropped triplets here */ } return need_ack; |