summaryrefslogtreecommitdiff
path: root/drivers/cpufreq/cpufreq_governor.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-06-03 10:27:11 (GMT)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-06-15 13:37:12 (GMT)
commit8e0484d2b38aeb2bcce0a7b32e6b33d72c11ad85 (patch)
tree3c4541f5167436e5f7ddb05984e5634ce8cc6daf /drivers/cpufreq/cpufreq_governor.c
parent37829029837b2f653fd407cbd6796dcf124c1ed8 (diff)
downloadlinux-8e0484d2b38aeb2bcce0a7b32e6b33d72c11ad85.tar.xz
cpufreq: governor: register notifier from cs_init()
Notifiers are required only for conservative governor and the common governor code is unnecessarily polluted with that. Handle that from cs_init/exit() instead of cpufreq_governor_dbs(). Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Preeti U Murthy <preeti@linux.vnet.ibm.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/cpufreq/cpufreq_governor.c')
-rw-r--r--drivers/cpufreq/cpufreq_governor.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index 1b44496..d64a82e 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -278,7 +278,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
dbs_data->cdata = cdata;
dbs_data->usage_count = 1;
- rc = cdata->init(dbs_data);
+ rc = cdata->init(dbs_data, !policy->governor->initialized);
if (rc) {
pr_err("%s: POLICY_INIT: init() failed\n", __func__);
kfree(dbs_data);
@@ -291,7 +291,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
rc = sysfs_create_group(get_governor_parent_kobj(policy),
get_sysfs_attr(dbs_data));
if (rc) {
- cdata->exit(dbs_data);
+ cdata->exit(dbs_data, !policy->governor->initialized);
kfree(dbs_data);
return rc;
}
@@ -309,14 +309,6 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
set_sampling_rate(dbs_data, max(dbs_data->min_sampling_rate,
latency * LATENCY_MULTIPLIER));
- if ((cdata->governor == GOV_CONSERVATIVE) &&
- (!policy->governor->initialized)) {
- struct cs_ops *cs_ops = dbs_data->cdata->gov_ops;
-
- cpufreq_register_notifier(cs_ops->notifier_block,
- CPUFREQ_TRANSITION_NOTIFIER);
- }
-
if (!have_governor_per_policy())
cdata->gdbs_data = dbs_data;
@@ -329,15 +321,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
if (!have_governor_per_policy())
cpufreq_put_global_kobject();
- if ((dbs_data->cdata->governor == GOV_CONSERVATIVE) &&
- (policy->governor->initialized == 1)) {
- struct cs_ops *cs_ops = dbs_data->cdata->gov_ops;
-
- cpufreq_unregister_notifier(cs_ops->notifier_block,
- CPUFREQ_TRANSITION_NOTIFIER);
- }
-
- cdata->exit(dbs_data);
+ cdata->exit(dbs_data, policy->governor->initialized == 1);
kfree(dbs_data);
cdata->gdbs_data = NULL;
}