On Mon 2020-07-20 17:37:50, Greg Kroah-Hartman wrote: > From: Finley Xiao <finley.xiao@xxxxxxxxxxxxxx> > > commit 371a3bc79c11b707d7a1b7a2c938dc3cc042fffb upstream. > > The function cpu_power_to_freq is used to find a frequency and set the > cooling device to consume at most the power to be converted. For example, > if the power to be converted is 80mW, and the em table is as follow. > struct em_cap_state table[] = { > /* KHz mW */ > { 1008000, 36, 0 }, > { 1200000, 49, 0 }, > { 1296000, 59, 0 }, > { 1416000, 72, 0 }, > { 1512000, 86, 0 }, > }; > The target frequency should be 1416000KHz, not 1512000KHz. > > Fixes: 349d39dc5739 ("thermal: cpu_cooling: merge frequency and power tables") Wow, this is completely different from the upstream patch. There the loops goes down, not up. The code does not match the changelog here. > --- a/drivers/thermal/cpu_cooling.c > +++ b/drivers/thermal/cpu_cooling.c > @@ -278,11 +278,11 @@ static u32 cpu_power_to_freq(struct cpuf > int i; > struct freq_table *freq_table = cpufreq_cdev->freq_table; > > - for (i = 1; i <= cpufreq_cdev->max_level; i++) > - if (power > freq_table[i].power) > + for (i = 0; i < cpufreq_cdev->max_level; i++) > + if (power >= freq_table[i].power) > break; > > - return freq_table[i - 1].frequency; > + return freq_table[i].frequency; > } Something is very wrong here, if table is sorted like described in the changelog, it will always break at i==0 or i==1... not working at all in the old or the new version. Best regards, Pavel -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Attachment:
signature.asc
Description: PGP signature