[PATCH] drm/amd/pm: Use pointer type for typecheck()

Palmer Dabbelt palmer at dabbelt.com
Thu Jun 12 21:31:08 UTC 2025


On Thu, 12 Jun 2025 05:23:21 PDT (-0700), lijo.lazar at amd.com wrote:
> typecheck creates local variables based on the type passed. That could
> result in stack frame size warnings like below in certain configs:
>
> drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_6_ppt.c:2885:1: error: the frame size of 8304 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
>
> Checking against the pointer type is sufficient for the purpose of
> getting a diagnostic message during build time.
>
> Signed-off-by: Lijo Lazar <lijo.lazar at amd.com>
> ---
>  drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h | 41 +++++++++++++-------------
>  1 file changed, 21 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h
> index 7473672abd2a..a608cdbdada4 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h
> @@ -40,28 +40,29 @@
>  #define SMU_IH_INTERRUPT_CONTEXT_ID_FAN_ABNORMAL        0x8
>  #define SMU_IH_INTERRUPT_CONTEXT_ID_FAN_RECOVERY        0x9
>
> -#define smu_cmn_init_soft_gpu_metrics(ptr, frev, crev)         \
> -	do {                                                   \
> -		typecheck(struct gpu_metrics_v##frev##_##crev, \
> -			  typeof(*(ptr)));                     \
> -		struct metrics_table_header *header =          \
> -			(struct metrics_table_header *)(ptr);  \
> -		memset(header, 0xFF, sizeof(*(ptr)));          \
> -		header->format_revision = frev;                \
> -		header->content_revision = crev;               \
> -		header->structure_size = sizeof(*(ptr));       \
> +#define smu_cmn_init_soft_gpu_metrics(ptr, frev, crev)                   \
> +	do {                                                             \
> +		typecheck(struct gpu_metrics_v##frev##_##crev *, (ptr)); \
> +		struct gpu_metrics_v##frev##_##crev *tmp = (ptr);        \
> +		struct metrics_table_header *header =                    \
> +			(struct metrics_table_header *)tmp;              \
> +		memset(header, 0xFF, sizeof(*tmp));                      \
> +		header->format_revision = frev;                          \
> +		header->content_revision = crev;                         \
> +		header->structure_size = sizeof(*tmp);                   \
>  	} while (0)
>
> -#define smu_cmn_init_partition_metrics(ptr, frev, crev)                     \
> -	do {                                                                \
> -		typecheck(struct amdgpu_partition_metrics_v##frev##_##crev, \
> -			  typeof(*(ptr)));                                  \
> -		struct metrics_table_header *header =                       \
> -			(struct metrics_table_header *)(ptr);               \
> -		memset(header, 0xFF, sizeof(*(ptr)));                       \
> -		header->format_revision = frev;                             \
> -		header->content_revision = crev;                            \
> -		header->structure_size = sizeof(*(ptr));                    \
> +#define smu_cmn_init_partition_metrics(ptr, fr, cr)                        \
> +	do {                                                               \
> +		typecheck(struct amdgpu_partition_metrics_v##fr##_##cr *,  \
> +			  (ptr));                                          \
> +		struct amdgpu_partition_metrics_v##fr##_##cr *tmp = (ptr); \
> +		struct metrics_table_header *header =                      \
> +			(struct metrics_table_header *)tmp;                \
> +		memset(header, 0xFF, sizeof(*tmp));                        \
> +		header->format_revision = fr;                              \
> +		header->content_revision = cr;                             \
> +		header->structure_size = sizeof(*tmp);                     \
>  	} while (0)
>
>  extern const int link_speed[];

This fixes my build isuses over at 
https://lore.kernel.org/r/20250610212141.19445-1-palmer@dabbelt.com .  

Reviewed-by: Palmer Dabbelt <palmer at dabbelt.com>
Tested-by: Palmer Dabbelt <palmer at dabbelt.com>

Thanks!

[I'm going to stash it on my tester branch until it land somewhere 
else.]


More information about the amd-gfx mailing list