]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/pm: Use pointer type for typecheck()
authorLijo Lazar <lijo.lazar@amd.com>
Thu, 12 Jun 2025 12:13:58 +0000 (17:43 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 18 Jun 2025 16:19:19 +0000 (12:19 -0400)
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@amd.com>
Reviewed-by: Palmer Dabbelt <palmer@dabbelt.com>
Tested-by: Palmer Dabbelt <palmer@dabbelt.com>
Link: https://lore.kernel.org/r/20250610212141.19445-1-palmer@dabbelt.com
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h

index 7473672abd2a91c8a4d278643b3b81a3d000d351..a608cdbdada4cbf968c260b7d2506915f2a133c0 100644 (file)
 #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[];