On Thu, 12 Jun 2025 05:23:21 PDT (-0700), lijo.la...@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.la...@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-pal...@dabbelt.com .
Reviewed-by: Palmer Dabbelt <pal...@dabbelt.com>
Tested-by: Palmer Dabbelt <pal...@dabbelt.com>

Thanks!

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

Reply via email to