This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: coda: fix deadlock between decoder picture run and start command
Author:  Philipp Zabel <p.za...@pengutronix.de>
Date:    Thu Oct 24 07:32:11 2019 -0300

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: e7fd95849b3c ("media: coda: flush bitstream ring buffer on decoder 
restart")
Signed-off-by: Philipp Zabel <p.za...@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+sams...@kernel.org>

 drivers/media/platform/coda/coda-common.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/coda/coda-common.c 
b/drivers/media/platform/coda/coda-common.c
index 73222c0615c0..834f11fe9dc2 100644
--- a/drivers/media/platform/coda/coda-common.c
+++ b/drivers/media/platform/coda/coda-common.c
@@ -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;

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to