|
@@ -23,6 +23,19 @@
|
|
|
|
|
|
static DEFINE_PER_CPU(struct cs_cpu_dbs_info_s, cs_cpu_dbs_info);
|
|
|
|
|
|
+static int cs_cpufreq_governor_dbs(struct cpufreq_policy *policy,
|
|
|
+ unsigned int event);
|
|
|
+
|
|
|
+#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
|
|
|
+static
|
|
|
+#endif
|
|
|
+struct cpufreq_governor cpufreq_gov_conservative = {
|
|
|
+ .name = "conservative",
|
|
|
+ .governor = cs_cpufreq_governor_dbs,
|
|
|
+ .max_transition_latency = TRANSITION_LATENCY_LIMIT,
|
|
|
+ .owner = THIS_MODULE,
|
|
|
+};
|
|
|
+
|
|
|
static inline unsigned int get_freq_target(struct cs_dbs_tuners *cs_tuners,
|
|
|
struct cpufreq_policy *policy)
|
|
|
{
|
|
@@ -119,12 +132,14 @@ static int dbs_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
|
|
struct cpufreq_freqs *freq = data;
|
|
|
struct cs_cpu_dbs_info_s *dbs_info =
|
|
|
&per_cpu(cs_cpu_dbs_info, freq->cpu);
|
|
|
- struct cpufreq_policy *policy;
|
|
|
+ struct cpufreq_policy *policy = cpufreq_cpu_get_raw(freq->cpu);
|
|
|
|
|
|
- if (!dbs_info->enable)
|
|
|
+ if (!policy)
|
|
|
return 0;
|
|
|
|
|
|
- policy = dbs_info->cdbs.shared->policy;
|
|
|
+ /* policy isn't governed by conservative governor */
|
|
|
+ if (policy->governor != &cpufreq_gov_conservative)
|
|
|
+ return 0;
|
|
|
|
|
|
/*
|
|
|
* we only care if our internally tracked freq moves outside the 'valid'
|
|
@@ -367,16 +382,6 @@ static int cs_cpufreq_governor_dbs(struct cpufreq_policy *policy,
|
|
|
return cpufreq_governor_dbs(policy, &cs_dbs_cdata, event);
|
|
|
}
|
|
|
|
|
|
-#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
|
|
|
-static
|
|
|
-#endif
|
|
|
-struct cpufreq_governor cpufreq_gov_conservative = {
|
|
|
- .name = "conservative",
|
|
|
- .governor = cs_cpufreq_governor_dbs,
|
|
|
- .max_transition_latency = TRANSITION_LATENCY_LIMIT,
|
|
|
- .owner = THIS_MODULE,
|
|
|
-};
|
|
|
-
|
|
|
static int __init cpufreq_gov_dbs_init(void)
|
|
|
{
|
|
|
return cpufreq_register_governor(&cpufreq_gov_conservative);
|