Merge branch 'pm-cpufreq-fixes'
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 21 Apr 2016 18:57:46 +0000 (20:57 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 21 Apr 2016 18:57:46 +0000 (20:57 +0200)
* pm-cpufreq-fixes:
  cpufreq: Abort cpufreq_update_current_freq() for cpufreq_suspended set
  intel_pstate: Avoid getting stuck in high P-states when idle

drivers/cpufreq/cpufreq.c
drivers/cpufreq/intel_pstate.c

index b87596b..e93405f 100644 (file)
@@ -1491,6 +1491,9 @@ static unsigned int cpufreq_update_current_freq(struct cpufreq_policy *policy)
 {
        unsigned int new_freq;
 
+       if (cpufreq_suspended)
+               return 0;
+
        new_freq = cpufreq_driver->get(policy->cpu);
        if (!new_freq)
                return 0;
index 8b5a415..30fe323 100644 (file)
@@ -1130,6 +1130,10 @@ static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu)
                sample_ratio = div_fp(int_tofp(pid_params.sample_rate_ns),
                                      int_tofp(duration_ns));
                core_busy = mul_fp(core_busy, sample_ratio);
+       } else {
+               sample_ratio = div_fp(100 * cpu->sample.mperf, cpu->sample.tsc);
+               if (sample_ratio < int_tofp(1))
+                       core_busy = 0;
        }
 
        cpu->sample.busy_scaled = core_busy;