RE: [PATCH 1/2] drm/amdgpu: Only create err_count sysfs when hw_op is supported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]

> -----Original Message-----
> From: Zhang, Hawking <Hawking.Zhang@xxxxxxx>
> Sent: Sunday, June 11, 2023 6:46 PM
> To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx; Yang, Stanley <Stanley.Yang@xxxxxxx>; Li,
> Candice <Candice.Li@xxxxxxx>; Chai, Thomas <YiPeng.Chai@xxxxxxx>;
> Zhou1, Tao <Tao.Zhou1@xxxxxxx>
> Cc: Zhang, Hawking <Hawking.Zhang@xxxxxxx>
> Subject: [PATCH 1/2] drm/amdgpu: Only create err_count sysfs when hw_op is
> supported
>
> Some IP blocks only support partial ras feature and don't have ras counter and/or
> ras error status register at all.
> Driver should not create err_count sysfs node for those IP blocks.
>
> Signed-off-by: Hawking Zhang <Hawking.Zhang@xxxxxxx>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 31 ++++++++++++++-----------
>  1 file changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> index a6c3265cdbc4..dd7cdc234d7e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> @@ -2757,23 +2757,28 @@ int amdgpu_ras_block_late_init(struct
> amdgpu_device *adev,
>                       goto cleanup;
>       }
>
> -     r = amdgpu_ras_sysfs_create(adev, ras_block);
> -     if (r)
> -             goto interrupt;
> +     if (ras_obj->hw_ops &&
> +         (ras_obj->hw_ops->query_ras_error_count ||
> +          ras_obj->hw_ops->query_ras_error_status)) {

[Tao] the condition can be also changed like this:

               if (!(ras_obj->hw_ops &&
            (ras_obj->hw_ops->query_ras_error_count ||
             ras_obj->hw_ops->query_ras_error_status)))
                    return 0;

Either way is fine with me.


> +             r = amdgpu_ras_sysfs_create(adev, ras_block);
> +             if (r)
> +                     goto interrupt;
>
> -     /* Those are the cached values at init.
> -      */
> -     query_info = kzalloc(sizeof(struct ras_query_if), GFP_KERNEL);
> -     if (!query_info)
> -             return -ENOMEM;
> -     memcpy(&query_info->head, ras_block, sizeof(struct ras_common_if));
> +             /* Those are the cached values at init.
> +              */
> +             query_info = kzalloc(sizeof(struct ras_query_if), GFP_KERNEL);
> +             if (!query_info)
> +                     return -ENOMEM;
> +             memcpy(&query_info->head, ras_block, sizeof(struct
> ras_common_if));
>
> -     if (amdgpu_ras_query_error_count(adev, &ce_count, &ue_count,
> query_info) == 0) {
> -             atomic_set(&con->ras_ce_count, ce_count);
> -             atomic_set(&con->ras_ue_count, ue_count);
> +             if (amdgpu_ras_query_error_count(adev, &ce_count, &ue_count,
> query_info) == 0) {
> +                     atomic_set(&con->ras_ce_count, ce_count);
> +                     atomic_set(&con->ras_ue_count, ue_count);
> +             }
> +
> +             kfree(query_info);
>       }
>
> -     kfree(query_info);
>       return 0;
>
>  interrupt:
> --
> 2.17.1





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux