Message ID | 1351615741-24134-3-git-send-email-hongbo.zhang@linaro.com |
---|---|
State | Accepted |
Commit | 9c51b05a7852183ba9654ca850bee97d38e948d5 |
Headers | show |
On Tue, 2012-10-30 at 17:48 +0100, hongbo.zhang wrote: > From: "hongbo.zhang" <hongbo.zhang@linaro.com> > > In the while loop for counting cpu frequencies, if table[i].frequency equals > CPUFREQ_ENTRY_INVALID, index i won't be increased, so this leads to an endless > loop, what's more the index i cannot be referred as cpu frequencies number if > there is CPUFREQ_ENTRY_INVALID case. > > Signed-off-by: hongbo.zhang <hongbo.zhang@linaro.com> > Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> > Reviewed-by: Amit Daniel Kachhap <amit.kachhap@linaro.org> applied to thermal-next. thanks, rui > --- > drivers/thermal/cpu_cooling.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c > index b6b4c2a..bfd62b7 100644 > --- a/drivers/thermal/cpu_cooling.c > +++ b/drivers/thermal/cpu_cooling.c > @@ -245,6 +245,7 @@ static int cpufreq_get_max_state(struct thermal_cooling_device *cdev, > struct cpumask *maskPtr; > unsigned int cpu; > struct cpufreq_frequency_table *table; > + unsigned long count = 0; > > mutex_lock(&cooling_cpufreq_lock); > list_for_each_entry(cpufreq_device, &cooling_cpufreq_list, node) { > @@ -263,13 +264,14 @@ static int cpufreq_get_max_state(struct thermal_cooling_device *cdev, > goto return_get_max_state; > } > > - while (table[i].frequency != CPUFREQ_TABLE_END) { > + for (i = 0; (table[i].frequency != CPUFREQ_TABLE_END); i++) { > if (table[i].frequency == CPUFREQ_ENTRY_INVALID) > continue; > - i++; > + count++; > } > - if (i > 0) { > - *state = --i; > + > + if (count > 0) { > + *state = --count; > ret = 0; > } >
diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c index b6b4c2a..bfd62b7 100644 --- a/drivers/thermal/cpu_cooling.c +++ b/drivers/thermal/cpu_cooling.c @@ -245,6 +245,7 @@ static int cpufreq_get_max_state(struct thermal_cooling_device *cdev, struct cpumask *maskPtr; unsigned int cpu; struct cpufreq_frequency_table *table; + unsigned long count = 0; mutex_lock(&cooling_cpufreq_lock); list_for_each_entry(cpufreq_device, &cooling_cpufreq_list, node) { @@ -263,13 +264,14 @@ static int cpufreq_get_max_state(struct thermal_cooling_device *cdev, goto return_get_max_state; } - while (table[i].frequency != CPUFREQ_TABLE_END) { + for (i = 0; (table[i].frequency != CPUFREQ_TABLE_END); i++) { if (table[i].frequency == CPUFREQ_ENTRY_INVALID) continue; - i++; + count++; } - if (i > 0) { - *state = --i; + + if (count > 0) { + *state = --count; ret = 0; }