[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