mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
media: venus: provide ctx queue lock for ioctl synchronization
[ Upstream commit 34318b808e ]
Video device has to provide a lock so that __video_do_ioctl()
can serialize IOCTL calls. Introduce a dedicated venus_inst
mutex for the purpose of vb2 operations synchronization.
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Stable-dep-of: 6c9934c5a00a ("media: venus: fix enc/dec destruction order")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
23f63457f0
commit
18028c437e
@@ -390,6 +390,7 @@ enum venus_inst_modes {
|
||||
* @sequence_out: a sequence counter for output queue
|
||||
* @m2m_dev: a reference to m2m device structure
|
||||
* @m2m_ctx: a reference to m2m context structure
|
||||
* @ctx_q_lock: a lock to serialize video device ioctl calls
|
||||
* @state: current state of the instance
|
||||
* @done: a completion for sync HFI operation
|
||||
* @error: an error returned during last HFI sync operation
|
||||
@@ -461,6 +462,7 @@ struct venus_inst {
|
||||
u32 sequence_out;
|
||||
struct v4l2_m2m_dev *m2m_dev;
|
||||
struct v4l2_m2m_ctx *m2m_ctx;
|
||||
struct mutex ctx_q_lock;
|
||||
unsigned int state;
|
||||
struct completion done;
|
||||
unsigned int error;
|
||||
|
||||
@@ -1604,6 +1604,7 @@ static int m2m_queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
src_vq->allow_zero_bytesused = 1;
|
||||
src_vq->min_buffers_needed = 0;
|
||||
src_vq->dev = inst->core->dev;
|
||||
src_vq->lock = &inst->ctx_q_lock;
|
||||
ret = vb2_queue_init(src_vq);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1618,6 +1619,7 @@ static int m2m_queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
dst_vq->allow_zero_bytesused = 1;
|
||||
dst_vq->min_buffers_needed = 0;
|
||||
dst_vq->dev = inst->core->dev;
|
||||
dst_vq->lock = &inst->ctx_q_lock;
|
||||
return vb2_queue_init(dst_vq);
|
||||
}
|
||||
|
||||
@@ -1636,6 +1638,7 @@ static int vdec_open(struct file *file)
|
||||
INIT_LIST_HEAD(&inst->internalbufs);
|
||||
INIT_LIST_HEAD(&inst->list);
|
||||
mutex_init(&inst->lock);
|
||||
mutex_init(&inst->ctx_q_lock);
|
||||
|
||||
inst->core = core;
|
||||
inst->session_type = VIDC_SESSION_TYPE_DEC;
|
||||
@@ -1712,6 +1715,7 @@ static int vdec_close(struct file *file)
|
||||
ida_destroy(&inst->dpb_ids);
|
||||
hfi_session_destroy(inst);
|
||||
mutex_destroy(&inst->lock);
|
||||
mutex_destroy(&inst->ctx_q_lock);
|
||||
v4l2_fh_del(&inst->fh);
|
||||
v4l2_fh_exit(&inst->fh);
|
||||
|
||||
|
||||
@@ -1370,6 +1370,7 @@ static int m2m_queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
src_vq->allow_zero_bytesused = 1;
|
||||
src_vq->min_buffers_needed = 1;
|
||||
src_vq->dev = inst->core->dev;
|
||||
src_vq->lock = &inst->ctx_q_lock;
|
||||
if (inst->core->res->hfi_version == HFI_VERSION_1XX)
|
||||
src_vq->bidirectional = 1;
|
||||
ret = vb2_queue_init(src_vq);
|
||||
@@ -1386,6 +1387,7 @@ static int m2m_queue_init(void *priv, struct vb2_queue *src_vq,
|
||||
dst_vq->allow_zero_bytesused = 1;
|
||||
dst_vq->min_buffers_needed = 1;
|
||||
dst_vq->dev = inst->core->dev;
|
||||
dst_vq->lock = &inst->ctx_q_lock;
|
||||
return vb2_queue_init(dst_vq);
|
||||
}
|
||||
|
||||
@@ -1418,6 +1420,7 @@ static int venc_open(struct file *file)
|
||||
INIT_LIST_HEAD(&inst->internalbufs);
|
||||
INIT_LIST_HEAD(&inst->list);
|
||||
mutex_init(&inst->lock);
|
||||
mutex_init(&inst->ctx_q_lock);
|
||||
|
||||
inst->core = core;
|
||||
inst->session_type = VIDC_SESSION_TYPE_ENC;
|
||||
@@ -1487,6 +1490,7 @@ static int venc_close(struct file *file)
|
||||
venc_ctrl_deinit(inst);
|
||||
hfi_session_destroy(inst);
|
||||
mutex_destroy(&inst->lock);
|
||||
mutex_destroy(&inst->ctx_q_lock);
|
||||
v4l2_fh_del(&inst->fh);
|
||||
v4l2_fh_exit(&inst->fh);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user