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 <[email protected]>
---
 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[];
-- 
2.25.1

Reply via email to