[PATCH] media: venus: vdec: fix error state assignment for zero bytesused

Renjiang Han posted 1 patch 2 months, 2 weeks ago
There is a newer version of this series
drivers/media/platform/qcom/venus/vdec.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
[PATCH] media: venus: vdec: fix error state assignment for zero bytesused
Posted by Renjiang Han 2 months, 2 weeks ago
Previously, the check for zero bytesused and the assignment of error
state was performed outside the V4L2_BUF_FLAG_LAST branch, which could
incorrectly set the error state during drain operations. This patch
moves the zero-bytesused check inside the 'else' branch, ensuring that
the error state is only set for non-EOS buffers with zero payload.

Additionally, the patch keeps the rest of the buffer state handling
logic unchanged, including handling of HFI_BUFFERFLAG_DATACORRUPT and
HFI_BUFFERFLAG_DROP_FRAME.

Signed-off-by: Renjiang Han <renjiang.han@oss.qualcomm.com>
---
This patch refines the error state assignment logic in the Venus vdec
driver for Qualcomm platforms. Specifically, it ensures that the buffer
state is only set to VB2_BUF_STATE_ERROR for non-EOS capture buffers
with zero bytesused, preventing false error reporting during drain
operations.
---
 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 4a6641fdffcf79705893be58c7ec5cf485e2fab9..d0bd2d86a31f9a18cb68b08ba66affdf8fc5092d 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -1440,10 +1440,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++;
 	}

---
base-commit: 663d0d1af3faefe673cabf4b6b077149a87ad71f
change-id: 20251126-fix-error-state-24183a8538cd

Best regards,
-- 
Renjiang Han <renjiang.han@oss.qualcomm.com>
Re: [PATCH] media: venus: vdec: fix error state assignment for zero bytesused
Posted by Bryan O'Donoghue 2 months ago
On 26/11/2025 04:23, Renjiang Han wrote:
> Previously, the check for zero bytesused and the assignment of error
> state was performed outside the V4L2_BUF_FLAG_LAST branch, which could
> incorrectly set the error state during drain operations. 

This deserves more elaboration.

Instead of saying previously - talk about what it currently does and the 
precise circumstances under which it goes wrong. Try to make the 
description as plain and concise as possible.

This patch
> moves the zero-bytesused check inside the 'else' branch, ensuring that
> the error state is only set for non-EOS buffers with zero payload.
> 
> Additionally, the patch keeps the rest of the buffer state handling
> logic unchanged, including handling of HFI_BUFFERFLAG_DATACORRUPT and
> HFI_BUFFERFLAG_DROP_FRAME.

I don't think you need to tell us what's not touched in your commit log.

- Tell us what is wrong directly and plainly.
   Include how the bug you are fixing can come about i.e. under what
   circumstances we would see the error.

- Then tell us how you've fixed it.

- And include a Fixes: tag please.
   Since this is a bug fix you are proposing, it needs to be backported.

> 
> Signed-off-by: Renjiang Han <renjiang.han@oss.qualcomm.com>
> ---
> This patch refines the error state assignment logic in the Venus vdec
> driver for Qualcomm platforms. Specifically, it ensures that the buffer
> state is only set to VB2_BUF_STATE_ERROR for non-EOS capture buffers
> with zero bytesused, preventing false error reporting during drain
> operations.
> ---
>   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 4a6641fdffcf79705893be58c7ec5cf485e2fab9..d0bd2d86a31f9a18cb68b08ba66affdf8fc5092d 100644
> --- a/drivers/media/platform/qcom/venus/vdec.c
> +++ b/drivers/media/platform/qcom/venus/vdec.c
> @@ -1440,10 +1440,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++;
>   	}
> 
> ---
> base-commit: 663d0d1af3faefe673cabf4b6b077149a87ad71f
> change-id: 20251126-fix-error-state-24183a8538cd
> 
> Best regards,
> --
> Renjiang Han <renjiang.han@oss.qualcomm.com>
>
Re: [PATCH] media: venus: vdec: fix error state assignment for zero bytesused
Posted by Renjiang Han 2 months ago
On 12/7/2025 7:56 AM, Bryan O'Donoghue wrote:
> On 26/11/2025 04:23, Renjiang Han wrote:
>> Previously, the check for zero bytesused and the assignment of error
>> state was performed outside the V4L2_BUF_FLAG_LAST branch, which could
>> incorrectly set the error state during drain operations. 
>
> This deserves more elaboration.
>
> Instead of saying previously - talk about what it currently does and 
> the precise circumstances under which it goes wrong. Try to make the 
> description as plain and concise as possible.
>
> This patch
>> moves the zero-bytesused check inside the 'else' branch, ensuring that
>> the error state is only set for non-EOS buffers with zero payload.
>>
>> Additionally, the patch keeps the rest of the buffer state handling
>> logic unchanged, including handling of HFI_BUFFERFLAG_DATACORRUPT and
>> HFI_BUFFERFLAG_DROP_FRAME.
>
> I don't think you need to tell us what's not touched in your commit log.
>
> - Tell us what is wrong directly and plainly.
>   Include how the bug you are fixing can come about i.e. under what
>   circumstances we would see the error.
>
> - Then tell us how you've fixed it.
>
> - And include a Fixes: tag please.
>   Since this is a bug fix you are proposing, it needs to be backported.
sure, thanks for your comments.
>
>>
>> Signed-off-by: Renjiang Han <renjiang.han@oss.qualcomm.com>
>> ---
>> This patch refines the error state assignment logic in the Venus vdec
>> driver for Qualcomm platforms. Specifically, it ensures that the buffer
>> state is only set to VB2_BUF_STATE_ERROR for non-EOS capture buffers
>> with zero bytesused, preventing false error reporting during drain
>> operations.
>> ---
>>   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 
>> 4a6641fdffcf79705893be58c7ec5cf485e2fab9..d0bd2d86a31f9a18cb68b08ba66affdf8fc5092d 
>> 100644
>> --- a/drivers/media/platform/qcom/venus/vdec.c
>> +++ b/drivers/media/platform/qcom/venus/vdec.c
>> @@ -1440,10 +1440,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++;
>>       }
>>
>> ---
>> base-commit: 663d0d1af3faefe673cabf4b6b077149a87ad71f
>> change-id: 20251126-fix-error-state-24183a8538cd
>>
>> Best regards,
>> -- 
>> Renjiang Han <renjiang.han@oss.qualcomm.com>
>>
>
-- 
Best regards,
Renjiang Han