media: coda: fix deadlock between decoder picture run and start command
commita3fd80198d
upstream. The BIT decoder picture run temporarily locks the bitstream mutex while the coda device mutex is locked, to refill the bitstream ring buffer. Consequently, the decoder start command, which locks both mutexes when flushing the bitstream ring buffer, must lock the coda device mutex first as well, to avoid an ABBA deadlock. Fixes:e7fd95849b
("media: coda: flush bitstream ring buffer on decoder restart") Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7eab724d4a
commit
03915a22e8
|
@ -1084,16 +1084,16 @@ static int coda_decoder_cmd(struct file *file, void *fh,
|
|||
|
||||
switch (dc->cmd) {
|
||||
case V4L2_DEC_CMD_START:
|
||||
mutex_lock(&ctx->bitstream_mutex);
|
||||
mutex_lock(&dev->coda_mutex);
|
||||
mutex_lock(&ctx->bitstream_mutex);
|
||||
coda_bitstream_flush(ctx);
|
||||
mutex_unlock(&dev->coda_mutex);
|
||||
dst_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
|
||||
V4L2_BUF_TYPE_VIDEO_CAPTURE);
|
||||
vb2_clear_last_buffer_dequeued(dst_vq);
|
||||
ctx->bit_stream_param &= ~CODA_BIT_STREAM_END_FLAG;
|
||||
coda_fill_bitstream(ctx, NULL);
|
||||
mutex_unlock(&ctx->bitstream_mutex);
|
||||
mutex_unlock(&dev->coda_mutex);
|
||||
break;
|
||||
case V4L2_DEC_CMD_STOP:
|
||||
stream_end = false;
|
||||
|
|
Loading…
Reference in New Issue