• Viresh Kumar's avatar
    cpufreq: schedutil: Reset cached_raw_freq when not in sync with next_freq · 07458f6a
    Viresh Kumar authored
    'cached_raw_freq' is used to get the next frequency quickly but should
    always be in sync with sg_policy->next_freq. There is a case where it is
    not and in such cases it should be reset to avoid switching to incorrect
    frequencies.
    
    Consider this case for example:
    
     - policy->cur is 1.2 GHz (Max)
     - New request comes for 780 MHz and we store that in cached_raw_freq.
     - Based on 780 MHz, we calculate the effective frequency as 800 MHz.
     - We then see the CPU wasn't idle recently and choose to keep the next
       freq as 1.2 GHz.
     - Now we have cached_raw_freq is 780 MHz and sg_policy->next_freq is
       1.2 GHz.
     - Now if the utilization doesn't change in then next request, then the
       next target frequency will still be 780 MHz and it will match with
       cached_raw_freq. But we will choose 1.2 GHz instead of 800 MHz here.
    
    Fixes: b7eaf1aa (cpufreq: schedutil: Avoid reducing frequency of busy CPUs prematurely)
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Cc: 4.12+ <stable@vger.kernel.org> # 4.12+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    07458f6a
cpufreq_schedutil.c 18.6 KB