diff options
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.patch | 98 |
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 + |