Commit b49e3d7c authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher
Browse files

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



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: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarPalmer Dabbelt <palmer@dabbelt.com>
Tested-by: default avatarPalmer Dabbelt <palmer@dabbelt.com>
Link: https://lore.kernel.org/r/20250610212141.19445-1-palmer@dabbelt.com


Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 594a774d
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -42,26 +42,27 @@

#define smu_cmn_init_soft_gpu_metrics(ptr, frev, crev)                   \
	do {                                                             \
		typecheck(struct gpu_metrics_v##frev##_##crev, \
			  typeof(*(ptr)));                     \
		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 *)(ptr);  \
		memset(header, 0xFF, sizeof(*(ptr)));          \
			(struct metrics_table_header *)tmp;              \
		memset(header, 0xFF, sizeof(*tmp));                      \
		header->format_revision = frev;                          \
		header->content_revision = crev;                         \
		header->structure_size = sizeof(*(ptr));       \
		header->structure_size = sizeof(*tmp);                   \
	} while (0)

#define smu_cmn_init_partition_metrics(ptr, frev, crev)                     \
#define smu_cmn_init_partition_metrics(ptr, fr, cr)                        \
	do {                                                               \
		typecheck(struct amdgpu_partition_metrics_v##frev##_##crev, \
			  typeof(*(ptr)));                                  \
		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 *)(ptr);               \
		memset(header, 0xFF, sizeof(*(ptr)));                       \
		header->format_revision = frev;                             \
		header->content_revision = crev;                            \
		header->structure_size = sizeof(*(ptr));                    \
			(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[];