|
@@ -36,6 +36,7 @@ struct sugov_policy {
|
|
|
u64 last_freq_update_time;
|
|
|
s64 freq_update_delay_ns;
|
|
|
unsigned int next_freq;
|
|
|
+ unsigned int cached_raw_freq;
|
|
|
|
|
|
/* The next fields are only needed if fast switch cannot be used. */
|
|
|
struct irq_work irq_work;
|
|
@@ -52,7 +53,6 @@ struct sugov_cpu {
|
|
|
struct update_util_data update_util;
|
|
|
struct sugov_policy *sg_policy;
|
|
|
|
|
|
- unsigned int cached_raw_freq;
|
|
|
unsigned long iowait_boost;
|
|
|
unsigned long iowait_boost_max;
|
|
|
u64 last_update;
|
|
@@ -146,9 +146,9 @@ static unsigned int get_next_freq(struct sugov_cpu *sg_cpu, unsigned long util,
|
|
|
|
|
|
freq = (freq + (freq >> 2)) * util / max;
|
|
|
|
|
|
- if (freq == sg_cpu->cached_raw_freq && sg_policy->next_freq != UINT_MAX)
|
|
|
+ if (freq == sg_policy->cached_raw_freq && sg_policy->next_freq != UINT_MAX)
|
|
|
return sg_policy->next_freq;
|
|
|
- sg_cpu->cached_raw_freq = freq;
|
|
|
+ sg_policy->cached_raw_freq = freq;
|
|
|
return cpufreq_driver_resolve_freq(policy, freq);
|
|
|
}
|
|
|
|
|
@@ -580,6 +580,7 @@ static int sugov_start(struct cpufreq_policy *policy)
|
|
|
sg_policy->next_freq = UINT_MAX;
|
|
|
sg_policy->work_in_progress = false;
|
|
|
sg_policy->need_freq_update = false;
|
|
|
+ sg_policy->cached_raw_freq = 0;
|
|
|
|
|
|
for_each_cpu(cpu, policy->cpus) {
|
|
|
struct sugov_cpu *sg_cpu = &per_cpu(sugov_cpu, cpu);
|
|
@@ -590,7 +591,6 @@ static int sugov_start(struct cpufreq_policy *policy)
|
|
|
sg_cpu->max = 0;
|
|
|
sg_cpu->flags = SCHED_CPUFREQ_RT;
|
|
|
sg_cpu->last_update = 0;
|
|
|
- sg_cpu->cached_raw_freq = 0;
|
|
|
sg_cpu->iowait_boost = 0;
|
|
|
sg_cpu->iowait_boost_max = policy->cpuinfo.max_freq;
|
|
|
cpufreq_add_update_util_hook(cpu, &sg_cpu->update_util,
|