Re: [1/2] drm/amd/powerplay: smu_v11_0: fix uninitialized variable use

2019-07-08 Thread Arnd Bergmann
On Mon, Jul 8, 2019 at 5:02 PM Nathan Chancellor
 wrote:
> On Mon, Jul 08, 2019 at 04:07:58PM +0200, Arnd Bergmann wrote:
> >   /* if don't has GetDpmClockFreq Message, try get current clock by 
> > SmuMetrics_t */
> > - if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0)
> > + if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0) {
> >   ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
> > - else {
> > + if (ret)
> > + return ret;
>
> I am kind of surprised that this fixes the warning. If I am interpreting
> the warning correctly, it is complaining that the member
> get_current_clk_freq_by_table could be NULL and not be called to
> initialize freq and that entire statement will become 0. If that is the
> case, it seems like this added error handling won't fix that problem,
> right?

No, I'm fairly sure this is the right fix. Looking at the whole function:

| static int smu_v11_0_get_current_clk_freq(struct smu_context *smu,
|  enum smu_clk_type clk_id,
|  uint32_t *value)
|{
|int ret = 0;
|uint32_t freq;
|
|if (clk_id >= SMU_CLK_COUNT || !value)
|return -EINVAL;
|
|/* if don't has GetDpmClockFreq Message, try get current
clock by SmuMetrics_t */
|if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0) {
|ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );

Here  may or may not get initialized

|} else {
|ret = smu_send_smc_msg_with_param(smu, SMU_MSG_GetDpmClockFreq,
|
(smu_clk_get_index(smu, clk_id) << 16));
|if (ret)
|return ret;
|
|   ret = smu_read_smc_arg(smu, );
|if (ret)
|return ret;

Same here, but if it's not initialized, we bail out

|}
|
|   freq *= 100;
|*value = freq;

And here it gets assigned to *value

|return ret;
|}

Arnd


Re: [1/2] drm/amd/powerplay: smu_v11_0: fix uninitialized variable use

2019-07-08 Thread Nathan Chancellor
On Mon, Jul 08, 2019 at 04:07:58PM +0200, Arnd Bergmann wrote:
> A mistake in the error handling caused an uninitialized
> variable to be used:
> 
> drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1102:10: error: variable 
> 'freq' is used uninitialized whenever '?:' condition is false 
> [-Werror,-Wsometimes-uninitialized]
> ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
>^
> drivers/gpu/drm/amd/amdgpu/../powerplay/inc/amdgpu_smu.h:880:3: note: 
> expanded from macro 'smu_get_current_clk_freq_by_table'
> ((smu)->ppt_funcs->get_current_clk_freq_by_table ? 
> (smu)->ppt_funcs->get_current_clk_freq_by_table((smu), (clk_type), (value)) : 
> 0)
>  ^~~
> drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1114:2: note: 
> uninitialized use occurs here
> freq *= 100;
> ^~~~
> drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1102:10: note: remove the 
> '?:' if its condition is always true
> ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
>^
> drivers/gpu/drm/amd/amdgpu/../powerplay/inc/amdgpu_smu.h:880:3: note: 
> expanded from macro 'smu_get_current_clk_freq_by_table'
> ((smu)->ppt_funcs->get_current_clk_freq_by_table ? 
> (smu)->ppt_funcs->get_current_clk_freq_by_table((smu), (clk_type), (value)) : 
> 0)
>  ^
> drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1095:15: note: initialize 
> the variable 'freq' to silence this warning
> uint32_t freq;
>  ^
>   = 0
> 
> Bail out of smu_v11_0_get_current_clk_freq() before we get there.
> 
> Fixes: e36182490dec ("drm/amd/powerplay: fix dpm freq unit error (10KHz -> 
> Mhz)")
> Signed-off-by: Arnd Bergmann 
> ---
>  drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 6 --
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c 
> b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> index c3f9714e9047..bd89a13b6679 100644
> --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> @@ -1099,9 +1099,11 @@ static int smu_v11_0_get_current_clk_freq(struct 
> smu_context *smu,
>   return -EINVAL;
>  
>   /* if don't has GetDpmClockFreq Message, try get current clock by 
> SmuMetrics_t */
> - if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0)
> + if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0) {
>   ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
> - else {
> + if (ret)
> + return ret;

I am kind of surprised that this fixes the warning. If I am interpreting
the warning correctly, it is complaining that the member
get_current_clk_freq_by_table could be NULL and not be called to
initialize freq and that entire statement will become 0. If that is the
case, it seems like this added error handling won't fix that problem,
right?

Cheers,
Nathan


[PATCH 1/2] drm/amd/powerplay: smu_v11_0: fix uninitialized variable use

2019-07-08 Thread Arnd Bergmann
A mistake in the error handling caused an uninitialized
variable to be used:

drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1102:10: error: variable 
'freq' is used uninitialized whenever '?:' condition is false 
[-Werror,-Wsometimes-uninitialized]
ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
   ^
drivers/gpu/drm/amd/amdgpu/../powerplay/inc/amdgpu_smu.h:880:3: note: expanded 
from macro 'smu_get_current_clk_freq_by_table'
((smu)->ppt_funcs->get_current_clk_freq_by_table ? 
(smu)->ppt_funcs->get_current_clk_freq_by_table((smu), (clk_type), (value)) : 0)
 ^~~
drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1114:2: note: uninitialized 
use occurs here
freq *= 100;
^~~~
drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1102:10: note: remove the 
'?:' if its condition is always true
ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
   ^
drivers/gpu/drm/amd/amdgpu/../powerplay/inc/amdgpu_smu.h:880:3: note: expanded 
from macro 'smu_get_current_clk_freq_by_table'
((smu)->ppt_funcs->get_current_clk_freq_by_table ? 
(smu)->ppt_funcs->get_current_clk_freq_by_table((smu), (clk_type), (value)) : 0)
 ^
drivers/gpu/drm/amd/amdgpu/../powerplay/smu_v11_0.c:1095:15: note: initialize 
the variable 'freq' to silence this warning
uint32_t freq;
 ^
  = 0

Bail out of smu_v11_0_get_current_clk_freq() before we get there.

Fixes: e36182490dec ("drm/amd/powerplay: fix dpm freq unit error (10KHz -> 
Mhz)")
Signed-off-by: Arnd Bergmann 
---
 drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c 
b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
index c3f9714e9047..bd89a13b6679 100644
--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
@@ -1099,9 +1099,11 @@ static int smu_v11_0_get_current_clk_freq(struct 
smu_context *smu,
return -EINVAL;
 
/* if don't has GetDpmClockFreq Message, try get current clock by 
SmuMetrics_t */
-   if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0)
+   if (smu_msg_get_index(smu, SMU_MSG_GetDpmClockFreq) == 0) {
ret =  smu_get_current_clk_freq_by_table(smu, clk_id, );
-   else {
+   if (ret)
+   return ret;
+   } else {
ret = smu_send_smc_msg_with_param(smu, SMU_MSG_GetDpmClockFreq,
  (smu_clk_get_index(smu, 
clk_id) << 16));
if (ret)
-- 
2.20.0