mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
[media] vb2: fix vb2 state check when start_streaming fails
Commit bd994ddb2a12a3ff48cd549ec82cdceaea9614df (vb2: Fix stream start and buffer completion race) broke the buffer state check in vb2_buffer_done. So accept all three possible states there since I can no longer tell the difference between vb2_buffer_done called from start_streaming or from elsewhere. Instead add a WARN_ON at the end of start_streaming that will check whether any buffers were added to the done list, since that implies that the wrong state was used as well. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: stable@vger.kernel.org # for v3.15 and up Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
44e8e69d46
commit
bf3593d939
@ -1165,13 +1165,10 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
|
||||
if (WARN_ON(vb->state != VB2_BUF_STATE_ACTIVE))
|
||||
return;
|
||||
|
||||
if (!q->start_streaming_called) {
|
||||
if (WARN_ON(state != VB2_BUF_STATE_QUEUED))
|
||||
state = VB2_BUF_STATE_QUEUED;
|
||||
} else if (WARN_ON(state != VB2_BUF_STATE_DONE &&
|
||||
state != VB2_BUF_STATE_ERROR)) {
|
||||
state = VB2_BUF_STATE_ERROR;
|
||||
}
|
||||
if (WARN_ON(state != VB2_BUF_STATE_DONE &&
|
||||
state != VB2_BUF_STATE_ERROR &&
|
||||
state != VB2_BUF_STATE_QUEUED))
|
||||
state = VB2_BUF_STATE_ERROR;
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
/*
|
||||
@ -1783,6 +1780,12 @@ static int vb2_start_streaming(struct vb2_queue *q)
|
||||
/* Must be zero now */
|
||||
WARN_ON(atomic_read(&q->owned_by_drv_count));
|
||||
}
|
||||
/*
|
||||
* If done_list is not empty, then start_streaming() didn't call
|
||||
* vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED) but STATE_ERROR or
|
||||
* STATE_DONE.
|
||||
*/
|
||||
WARN_ON(!list_empty(&q->done_list));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user