|
|
@@ -1648,7 +1648,7 @@ static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
|
|
|
void *pb, int nonblocking)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
- int ret;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
/*
|
|
|
* Wait for at least one buffer to become available on the done_list.
|
|
|
@@ -1664,10 +1664,12 @@ static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
|
|
|
spin_lock_irqsave(&q->done_lock, flags);
|
|
|
*vb = list_first_entry(&q->done_list, struct vb2_buffer, done_entry);
|
|
|
/*
|
|
|
- * Only remove the buffer from done_list if v4l2_buffer can handle all
|
|
|
- * the planes.
|
|
|
+ * Only remove the buffer from done_list if all planes can be
|
|
|
+ * handled. Some cases such as V4L2 file I/O and DVB have pb
|
|
|
+ * == NULL; skip the check then as there's nothing to verify.
|
|
|
*/
|
|
|
- ret = call_bufop(q, verify_planes_array, *vb, pb);
|
|
|
+ if (pb)
|
|
|
+ ret = call_bufop(q, verify_planes_array, *vb, pb);
|
|
|
if (!ret)
|
|
|
list_del(&(*vb)->done_entry);
|
|
|
spin_unlock_irqrestore(&q->done_lock, flags);
|