diff options
Diffstat (limited to 'drivers/cpufreq/cpufreq.c')
| -rw-r--r-- | drivers/cpufreq/cpufreq.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 063b2184caf5..938b74ea9ffb 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -1077,6 +1077,7 @@ err_out_unregister: | |||
| 1077 | 1077 | ||
| 1078 | err_unlock_policy: | 1078 | err_unlock_policy: |
| 1079 | unlock_policy_rwsem_write(cpu); | 1079 | unlock_policy_rwsem_write(cpu); |
| 1080 | free_cpumask_var(policy->related_cpus); | ||
| 1080 | err_free_cpumask: | 1081 | err_free_cpumask: |
| 1081 | free_cpumask_var(policy->cpus); | 1082 | free_cpumask_var(policy->cpus); |
| 1082 | err_free_policy: | 1083 | err_free_policy: |
| @@ -1762,17 +1763,8 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, | |||
| 1762 | dprintk("governor switch\n"); | 1763 | dprintk("governor switch\n"); |
| 1763 | 1764 | ||
| 1764 | /* end old governor */ | 1765 | /* end old governor */ |
| 1765 | if (data->governor) { | 1766 | if (data->governor) |
| 1766 | /* | ||
| 1767 | * Need to release the rwsem around governor | ||
| 1768 | * stop due to lock dependency between | ||
| 1769 | * cancel_delayed_work_sync and the read lock | ||
| 1770 | * taken in the delayed work handler. | ||
| 1771 | */ | ||
| 1772 | unlock_policy_rwsem_write(data->cpu); | ||
| 1773 | __cpufreq_governor(data, CPUFREQ_GOV_STOP); | 1767 | __cpufreq_governor(data, CPUFREQ_GOV_STOP); |
| 1774 | lock_policy_rwsem_write(data->cpu); | ||
| 1775 | } | ||
| 1776 | 1768 | ||
| 1777 | /* start new governor */ | 1769 | /* start new governor */ |
| 1778 | data->governor = policy->governor; | 1770 | data->governor = policy->governor; |
