|
@@ -387,16 +387,18 @@ static int cpufreq_governor_init(struct cpufreq_policy *policy,
|
|
|
if (!have_governor_per_policy())
|
|
|
cdata->gdbs_data = dbs_data;
|
|
|
|
|
|
+ policy->governor_data = dbs_data;
|
|
|
+
|
|
|
ret = sysfs_create_group(get_governor_parent_kobj(policy),
|
|
|
get_sysfs_attr(dbs_data));
|
|
|
if (ret)
|
|
|
goto reset_gdbs_data;
|
|
|
|
|
|
- policy->governor_data = dbs_data;
|
|
|
-
|
|
|
return 0;
|
|
|
|
|
|
reset_gdbs_data:
|
|
|
+ policy->governor_data = NULL;
|
|
|
+
|
|
|
if (!have_governor_per_policy())
|
|
|
cdata->gdbs_data = NULL;
|
|
|
cdata->exit(dbs_data, !policy->governor->initialized);
|
|
@@ -417,16 +419,19 @@ static int cpufreq_governor_exit(struct cpufreq_policy *policy,
|
|
|
if (!cdbs->shared || cdbs->shared->policy)
|
|
|
return -EBUSY;
|
|
|
|
|
|
- policy->governor_data = NULL;
|
|
|
if (!--dbs_data->usage_count) {
|
|
|
sysfs_remove_group(get_governor_parent_kobj(policy),
|
|
|
get_sysfs_attr(dbs_data));
|
|
|
|
|
|
+ policy->governor_data = NULL;
|
|
|
+
|
|
|
if (!have_governor_per_policy())
|
|
|
cdata->gdbs_data = NULL;
|
|
|
|
|
|
cdata->exit(dbs_data, policy->governor->initialized == 1);
|
|
|
kfree(dbs_data);
|
|
|
+ } else {
|
|
|
+ policy->governor_data = NULL;
|
|
|
}
|
|
|
|
|
|
free_common_dbs_info(policy, cdata);
|