diff options
-rw-r--r-- | drivers/cpufreq/cpufreq_governor.c | 11 |
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 | ||
399 | reset_gdbs_data: | 399 | reset_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); |