aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/cpufreq_governor.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index bab3a514ec12..e0d111024d48 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -387,16 +387,18 @@ static int cpufreq_governor_init(struct cpufreq_policy *policy,
387 if (!have_governor_per_policy()) 387 if (!have_governor_per_policy())
388 cdata->gdbs_data = dbs_data; 388 cdata->gdbs_data = dbs_data;
389 389
390 policy->governor_data = dbs_data;
391
390 ret = sysfs_create_group(get_governor_parent_kobj(policy), 392 ret = sysfs_create_group(get_governor_parent_kobj(policy),
391 get_sysfs_attr(dbs_data)); 393 get_sysfs_attr(dbs_data));
392 if (ret) 394 if (ret)
393 goto reset_gdbs_data; 395 goto reset_gdbs_data;
394 396
395 policy->governor_data = dbs_data;
396
397 return 0; 397 return 0;
398 398
399reset_gdbs_data: 399reset_gdbs_data:
400 policy->governor_data = NULL;
401
400 if (!have_governor_per_policy()) 402 if (!have_governor_per_policy())
401 cdata->gdbs_data = NULL; 403 cdata->gdbs_data = NULL;
402 cdata->exit(dbs_data, !policy->governor->initialized); 404 cdata->exit(dbs_data, !policy->governor->initialized);
@@ -417,16 +419,19 @@ static int cpufreq_governor_exit(struct cpufreq_policy *policy,
417 if (!cdbs->shared || cdbs->shared->policy) 419 if (!cdbs->shared || cdbs->shared->policy)
418 return -EBUSY; 420 return -EBUSY;
419 421
420 policy->governor_data = NULL;
421 if (!--dbs_data->usage_count) { 422 if (!--dbs_data->usage_count) {
422 sysfs_remove_group(get_governor_parent_kobj(policy), 423 sysfs_remove_group(get_governor_parent_kobj(policy),
423 get_sysfs_attr(dbs_data)); 424 get_sysfs_attr(dbs_data));
424 425
426 policy->governor_data = NULL;
427
425 if (!have_governor_per_policy()) 428 if (!have_governor_per_policy())
426 cdata->gdbs_data = NULL; 429 cdata->gdbs_data = NULL;
427 430
428 cdata->exit(dbs_data, policy->governor->initialized == 1); 431 cdata->exit(dbs_data, policy->governor->initialized == 1);
429 kfree(dbs_data); 432 kfree(dbs_data);
433 } else {
434 policy->governor_data = NULL;
430 } 435 }
431 436
432 free_common_dbs_info(policy, cdata); 437 free_common_dbs_info(policy, cdata);