[PATCH] media: iris: remove v4l2_m2m_ioctl_{de,en}coder_cmd API usage during STOP handling

Dikshita Agarwal posted 1 patch 3 months, 1 week ago
drivers/media/platform/qcom/iris/iris_vidc.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
[PATCH] media: iris: remove v4l2_m2m_ioctl_{de,en}coder_cmd API usage during STOP handling
Posted by Dikshita Agarwal 3 months, 1 week ago
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>
---
 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 d38d0f6961cd5cb9929e2aecbec7353dcc2d4a7d..07682400de690ad29c86ab2798beea6f09fdd049 100644
--- a/drivers/media/platform/qcom/iris/iris_vidc.c
+++ b/drivers/media/platform/qcom/iris/iris_vidc.c
@@ -572,9 +572,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;
@@ -605,9 +606,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;

---
base-commit: 163917839c0eea3bdfe3620f27f617a55fd76302
change-id: 20251031-iris-drain-fix-75fd950e1165

Best regards,
-- 
Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Re: [PATCH] media: iris: remove v4l2_m2m_ioctl_{de,en}coder_cmd API usage during STOP handling
Posted by Vikash Garodia 3 months ago
On 11/2/2025 9:10 AM, 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<dikshita.agarwal@oss.qualcomm.com>

Reviewed-by: Vikash Garodia<vikash.garodia@oss.qualcomm.com>