Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: mediatek: vcodec: Use ctx vb2_queue mutex instead of device mutex

There is only one device mutex to lock vb2_queue when running
multi-instance encoding, it can be set by each encoder context.

[hverkuil: fix q_mutex documentation in the header]

Signed-off-by: Irui Wang <irui.wang@mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>

authored by

Irui Wang and committed by
Mauro Carvalho Chehab
58037ad4 cd61f3c6

+7 -3
+3
drivers/media/platform/mediatek/vcodec/mtk_vcodec_drv.h
··· 278 278 * @hw_id: hardware index used to identify different hardware. 279 279 * 280 280 * @msg_queue: msg queue used to store lat buffer information. 281 + * @q_mutex: vb2_queue mutex. 281 282 */ 282 283 struct mtk_vcodec_ctx { 283 284 enum mtk_instance_type type; ··· 325 324 int hw_id; 326 325 327 326 struct vdec_msg_queue msg_queue; 327 + 328 + struct mutex q_mutex; 328 329 }; 329 330 330 331 /*
+3 -3
drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c
··· 1300 1300 { 1301 1301 struct mtk_q_data *q_data; 1302 1302 1303 - ctx->m2m_ctx->q_lock = &ctx->dev->dev_mutex; 1303 + ctx->m2m_ctx->q_lock = &ctx->q_mutex; 1304 1304 ctx->fh.m2m_ctx = ctx->m2m_ctx; 1305 1305 ctx->fh.ctrl_handler = &ctx->ctrl_hdl; 1306 1306 INIT_WORK(&ctx->encode_work, mtk_venc_worker); ··· 1435 1435 src_vq->ops = &mtk_venc_vb2_ops; 1436 1436 src_vq->mem_ops = &vb2_dma_contig_memops; 1437 1437 src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY; 1438 - src_vq->lock = &ctx->dev->dev_mutex; 1438 + src_vq->lock = &ctx->q_mutex; 1439 1439 src_vq->dev = &ctx->dev->plat_dev->dev; 1440 1440 1441 1441 ret = vb2_queue_init(src_vq); ··· 1449 1449 dst_vq->ops = &mtk_venc_vb2_ops; 1450 1450 dst_vq->mem_ops = &vb2_dma_contig_memops; 1451 1451 dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY; 1452 - dst_vq->lock = &ctx->dev->dev_mutex; 1452 + dst_vq->lock = &ctx->q_mutex; 1453 1453 dst_vq->dev = &ctx->dev->plat_dev->dev; 1454 1454 1455 1455 return vb2_queue_init(dst_vq);
+1
drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_drv.c
··· 130 130 INIT_LIST_HEAD(&ctx->list); 131 131 ctx->dev = dev; 132 132 init_waitqueue_head(&ctx->queue[0]); 133 + mutex_init(&ctx->q_mutex); 133 134 134 135 ctx->type = MTK_INST_ENCODER; 135 136 ret = mtk_vcodec_enc_ctrls_setup(ctx);