On Sun Nov 2 09:10:19 2025 +0530, Dikshita Agarwal wrote:
> 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 <[email protected]>
> Reviewed-by: Vikash Garodia <[email protected]>
> Cc: [email protected]
> Signed-off-by: Bryan O'Donoghue <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/qcom/iris/iris_vidc.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

---

diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c 
b/drivers/media/platform/qcom/iris/iris_vidc.c
index dfd94f4a84a9..bd38d84c9cc7 100644
--- a/drivers/media/platform/qcom/iris/iris_vidc.c
+++ b/drivers/media/platform/qcom/iris/iris_vidc.c
@@ -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;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to