Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Upgrade to 4.4.50-rt62
[kvmfornfv.git]
/
kernel
/
drivers
/
media
/
v4l2-core
/
videobuf2-core.c
diff --git
a/kernel/drivers/media/v4l2-core/videobuf2-core.c
b/kernel/drivers/media/v4l2-core/videobuf2-core.c
index
33bdd81
..
47f3768
100644
(file)
--- a/
kernel/drivers/media/v4l2-core/videobuf2-core.c
+++ b/
kernel/drivers/media/v4l2-core/videobuf2-core.c
@@
-1502,10
+1502,10
@@
static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking)
* Will sleep if required for nonblocking == false.
*/
static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
* Will sleep if required for nonblocking == false.
*/
static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
-
int nonblocking)
+
void *pb,
int nonblocking)
{
unsigned long flags;
{
unsigned long flags;
- int ret;
+ int ret
= 0
;
/*
* Wait for at least one buffer to become available on the done_list.
/*
* Wait for at least one buffer to become available on the done_list.
@@
-1521,12
+1521,14
@@
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);
/*
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.
- * Verifying planes is NOT necessary since it already has been checked
- * before the buffer is queued/prepared. So it can never fail.
+ * 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.
*/
*/
- list_del(&(*vb)->done_entry);
+ 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);
return ret;
spin_unlock_irqrestore(&q->done_lock, flags);
return ret;
@@
-1604,7
+1606,7
@@
int vb2_core_dqbuf(struct vb2_queue *q, void *pb, bool nonblocking)
struct vb2_buffer *vb = NULL;
int ret;
struct vb2_buffer *vb = NULL;
int ret;
- ret = __vb2_get_done_vb(q, &vb, nonblocking);
+ ret = __vb2_get_done_vb(q, &vb,
pb,
nonblocking);
if (ret < 0)
return ret;
if (ret < 0)
return ret;