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>
This commit is contained in:
Julia Lawall 2009-07-12 09:43:21 +02:00 committed by Greg Kroah-Hartman
parent f2eb519774
commit 980fd895e6

View file

@ -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;