diff mbox

drm/mgag200: don't use uninitialized variables in mga_g200se_set_plls()

Message ID 5624E21E02000078000AC48B@prv-mh.provo.novell.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Beulich Oct. 19, 2015, 10:29 a.m. UTC
I can only guess that instead of testm/testn (which are either
uninitialized or have pre-determined values at the end of the preceding
loops) n and m were meant to be used by commit e829d7ef9f
("drm/mgag200: Add support for a new rev of G200e"). In any event the
compiler is right in warning that testm/testn are possibly uninitalized
at this point, i.e. some change is needed no matter what.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
---
 drivers/gpu/drm/mgag200/mgag200_mode.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jan Beulich Oct. 20, 2015, 3 p.m. UTC | #1
>>> On 20.10.15 at 16:47, <mathieu.larouche@matrox.com> wrote:
> On 19/10/2015 6:29 AM, Jan Beulich wrote:
>> --- 4.3-rc6/drivers/gpu/drm/mgag200/mgag200_mode.c
>> +++ 4.3-rc6-mgag200-uninit/drivers/gpu/drm/mgag200/mgag200_mode.c
>> @@ -194,7 +194,7 @@ static int mga_g200se_set_plls(struct mg
>>   			}
>>   		}
>>   
>> -		fvv = pllreffreq * testn / testm;
>> +		fvv = pllreffreq * n / m;
>>   		fvv = (fvv - 800000) / 50000;
>>   
>>   		if (fvv > 15)
>>
> If you are using n/m instead of testn/testm, you need to
> add 1 to the variables to keep consistency. However, you
> have the same issue where m/n could be used without being
> initialized. So, I propose to keep testm, testn & testp
> and initialized them with the default value.

That makes them initialized, but since testn and testm are used
as loop variables I don't see how initializing them to default
values helps overcome the other half of the problem described
(them having a constant, pre-determined value at the end of
the loops: testn=257, testm=33). As to testp - it is always
initialized anyway (so long as P_ARRAY_SIZE is not zero). And
in the if() branch initialization isn't needed either, since the
variables aren't being used after the loops.

Jan
Mathieu Larouche Oct. 20, 2015, 3:12 p.m. UTC | #2
On 20/10/2015 11:00 AM, Jan Beulich wrote:
>>>> On 20.10.15 at 16:47, <mathieu.larouche@matrox.com> wrote:
>> On 19/10/2015 6:29 AM, Jan Beulich wrote:
>>> --- 4.3-rc6/drivers/gpu/drm/mgag200/mgag200_mode.c
>>> +++ 4.3-rc6-mgag200-uninit/drivers/gpu/drm/mgag200/mgag200_mode.c
>>> @@ -194,7 +194,7 @@ static int mga_g200se_set_plls(struct mg
>>>    			}
>>>    		}
>>>    
>>> -		fvv = pllreffreq * testn / testm;
>>> +		fvv = pllreffreq * n / m;
>>>    		fvv = (fvv - 800000) / 50000;
>>>    
>>>    		if (fvv > 15)
>>>
>> If you are using n/m instead of testn/testm, you need to
>> add 1 to the variables to keep consistency. However, you
>> have the same issue where m/n could be used without being
>> initialized. So, I propose to keep testm, testn & testp
>> and initialized them with the default value.
> That makes them initialized, but since testn and testm are used
> as loop variables I don't see how initializing them to default
> values helps overcome the other half of the problem described
> (them having a constant, pre-determined value at the end of
> the loops: testn=257, testm=33). As to testp - it is always
> initialized anyway (so long as P_ARRAY_SIZE is not zero). And
> in the if() branch initialization isn't needed either, since the
> variables aren't being used after the loops.
>
> Jan
>
>
Sorry, I missed that part in your initial comment and you are right,
there's an issue there. So, your proposed patch totally make sense,
you only need to add 1 to m/n.
diff mbox

Patch

--- 4.3-rc6/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ 4.3-rc6-mgag200-uninit/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -194,7 +194,7 @@  static int mga_g200se_set_plls(struct mg
 			}
 		}
 
-		fvv = pllreffreq * testn / testm;
+		fvv = pllreffreq * n / m;
 		fvv = (fvv - 800000) / 50000;
 
 		if (fvv > 15)