| From 769ae19630bbc5f2bea654fadb6e0e2209554cb1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 11 Dec 2025 15:20:39 +0530 |
| Subject: media: venus: vdec: fix error state assignment for zero bytesused |
| |
| From: Renjiang Han <renjiang.han@oss.qualcomm.com> |
| |
| [ Upstream commit 93ecd6ee95c38cb533fa25f48d3c1c8cb69f410f ] |
| |
| When hfi_session_flush is issued, all queued buffers are returned to |
| the V4L2 driver. Some of these buffers are not processed and have |
| bytesused = 0. Currently, the driver marks such buffers as error even |
| during drain operations, which can incorrectly flag EOS buffers. |
| |
| Only capture buffers with zero payload (and not EOS) should be marked |
| with VB2_BUF_STATE_ERROR. The check is performed inside the non-EOS |
| branch to ensure correct handling. |
| |
| Fixes: 51df3c81ba10b ("media: venus: vdec: Mark flushed buffers with error state") |
| Signed-off-by: Renjiang Han <renjiang.han@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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/platform/qcom/venus/vdec.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c |
| index b18459c5290c4..60832861a9ef1 100644 |
| --- a/drivers/media/platform/qcom/venus/vdec.c |
| +++ b/drivers/media/platform/qcom/venus/vdec.c |
| @@ -1311,10 +1311,10 @@ static void vdec_buf_done(struct venus_inst *inst, unsigned int buf_type, |
| inst->drain_active = false; |
| inst->codec_state = VENUS_DEC_STATE_STOPPED; |
| } |
| + } else { |
| + if (!bytesused) |
| + state = VB2_BUF_STATE_ERROR; |
| } |
| - |
| - if (!bytesused) |
| - state = VB2_BUF_STATE_ERROR; |
| } else { |
| vbuf->sequence = inst->sequence_out++; |
| } |
| -- |
| 2.51.0 |
| |