aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3317-drm-amd-powerplay-Zero-initialize-some-variables.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3317-drm-amd-powerplay-Zero-initialize-some-variables.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3317-drm-amd-powerplay-Zero-initialize-some-variables.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3317-drm-amd-powerplay-Zero-initialize-some-variables.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3317-drm-amd-powerplay-Zero-initialize-some-variables.patch
new file mode 100644
index 00000000..4adaf15c
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3317-drm-amd-powerplay-Zero-initialize-some-variables.patch
@@ -0,0 +1,98 @@
+From 520bc48786cc605d50cfaf803137a2d039d6a391 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <natechancellor@gmail.com>
+Date: Sun, 4 Aug 2019 13:37:13 -0700
+Subject: [PATCH 3317/4256] drm/amd/powerplay: Zero initialize some variables
+
+Clang warns (only Navi warning shown but Arcturus warns as well):
+
+drivers/gpu/drm/amd/amdgpu/../powerplay/navi10_ppt.c:1534:4: warning:
+variable 'asic_default_power_limit' is used uninitialized whenever '?:'
+condition is false [-Wsometimes-uninitialized]
+ smu_read_smc_arg(smu, &asic_default_power_limit);
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/gpu/drm/amd/amdgpu/../powerplay/inc/amdgpu_smu.h:588:3: note:
+expanded from macro 'smu_read_smc_arg'
+ ((smu)->funcs->read_smc_arg? (smu)->funcs->read_smc_arg((smu), (arg)) : 0)
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/gpu/drm/amd/amdgpu/../powerplay/navi10_ppt.c:1550:30: note:
+uninitialized use occurs here
+ smu->default_power_limit = asic_default_power_limit;
+ ^~~~~~~~~~~~~~~~~~~~~~~~
+drivers/gpu/drm/amd/amdgpu/../powerplay/navi10_ppt.c:1534:4: note:
+remove the '?:' if its condition is always true
+ smu_read_smc_arg(smu, &asic_default_power_limit);
+ ^
+drivers/gpu/drm/amd/amdgpu/../powerplay/inc/amdgpu_smu.h:588:3: note:
+expanded from macro 'smu_read_smc_arg'
+ ((smu)->funcs->read_smc_arg? (smu)->funcs->read_smc_arg((smu), (arg)) : 0)
+ ^
+drivers/gpu/drm/amd/amdgpu/../powerplay/navi10_ppt.c:1517:35: note:
+initialize the variable 'asic_default_power_limit' to silence this
+warning
+ uint32_t asic_default_power_limit;
+ ^
+ = 0
+1 warning generated.
+
+As the code is currently written, if read_smc_arg were ever NULL, arg
+would fail to be initialized but the code would continue executing as
+normal because the return value would just be zero.
+
+There are a few different possible solutions to resolve this class
+of warnings which have appeared in these drivers before:
+
+1. Assume the function pointer will never be NULL and eliminate the
+ wrapper macros.
+
+2. Have the wrapper macros initialize arg when the function pointer is
+ NULL.
+
+3. Have the wrapper macros return an error code instead of 0 when the
+ function pointer is NULL so that the callsites can properly bail out
+ before arg can be used.
+
+4. Initialize arg at the top of its function.
+
+Number four is the path of least resistance right now as every other
+change will be driver wide so do that here. I only make the comment
+now as food for thought.
+
+Fixes: b4af964e75c4 ("drm/amd/powerplay: make power limit retrieval as asic specific")
+Link: https://github.com/ClangBuiltLinux/linux/issues/627
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 2 +-
+ drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
+index d63956ae3f42..52e6214c3f22 100644
+--- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
+@@ -1326,7 +1326,7 @@ static int arcturus_get_power_limit(struct smu_context *smu,
+ bool asic_default)
+ {
+ PPTable_t *pptable = smu->smu_table.driver_pptable;
+- uint32_t asic_default_power_limit;
++ uint32_t asic_default_power_limit = 0;
+ int ret = 0;
+ int power_src;
+
+diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+index b7bb0f78f489..96cc2f95d078 100644
+--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
+@@ -1520,7 +1520,7 @@ static int navi10_get_power_limit(struct smu_context *smu,
+ bool asic_default)
+ {
+ PPTable_t *pptable = smu->smu_table.driver_pptable;
+- uint32_t asic_default_power_limit;
++ uint32_t asic_default_power_limit = 0;
+ int ret = 0;
+ int power_src;
+
+--
+2.17.1
+