]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: iris: remove v4l2_m2m_ioctl_{de,en}coder_cmd API usage during STOP handling
authorDikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Sun, 2 Nov 2025 03:40:19 +0000 (09:10 +0530)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Tue, 20 Jan 2026 13:00:12 +0000 (14:00 +0100)
Currently v4l2_m2m_ioctl_{de,enc}coder_cmd is being invoked during STOP
command handling. However, this is not required as the iris driver has
its own drain and stop handling mechanism in place.

Using the m2m command API in this context leads to incorrect behavior,
where the LAST flag is prematurely attached to a capture buffer,
when there are no buffers in m2m source queue. But, in this scenario
even though the source buffers are returned to client, hardware might
still need to process the pending capture buffers.

Attaching LAST flag prematurely can result in the capture buffer being
removed from the destination queue before the hardware has finished
processing it, causing issues when the buffer is eventually returned by
the hardware.

To prevent this, remove the m2m API usage in stop handling.

Fixes: d09100763bed ("media: iris: add support for drain sequence")
Fixes: 75db90ae067d ("media: iris: Add support for drain sequence in encoder video device")
Signed-off-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Reviewed-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/platform/qcom/iris/iris_vidc.c

index dfd94f4a84a9410d1e6b6a7c503c9d7bc4c7a1af..bd38d84c9cc79d15585ed5dd5f905a37521cb6dc 100644 (file)
@@ -573,9 +573,10 @@ static int iris_dec_cmd(struct file *filp, void *fh,
 
        mutex_lock(&inst->lock);
 
-       ret = v4l2_m2m_ioctl_decoder_cmd(filp, fh, dec);
-       if (ret)
+       if (dec->cmd != V4L2_DEC_CMD_STOP && dec->cmd != V4L2_DEC_CMD_START) {
+               ret = -EINVAL;
                goto unlock;
+       }
 
        if (inst->state == IRIS_INST_DEINIT)
                goto unlock;
@@ -606,9 +607,10 @@ static int iris_enc_cmd(struct file *filp, void *fh,
 
        mutex_lock(&inst->lock);
 
-       ret = v4l2_m2m_ioctl_encoder_cmd(filp, fh, enc);
-       if (ret)
+       if (enc->cmd != V4L2_ENC_CMD_STOP && enc->cmd != V4L2_ENC_CMD_START) {
+               ret = -EINVAL;
                goto unlock;
+       }
 
        if (inst->state == IRIS_INST_DEINIT)
                goto unlock;