[PATCH 3/8] cpufreq: powerenv: Fix memory leak

From: Viresh Kumar
Date: Wed Jun 01 2016 - 06:36:03 EST


The policy is copied (unnecessarily) and is never freed. Fix it by just
getting a reference to the existing policy structure and putting it
back.

Signed-off-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx>
---
drivers/cpufreq/powernv-cpufreq.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
index 54c45368e3f1..96bb4acd366e 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -756,15 +756,18 @@ void powernv_cpufreq_work_fn(struct work_struct *work)

chip->restore = false;
for_each_cpu(cpu, &mask) {
+ struct cpufreq_policy *policy = cpufreq_cpu_get(cpu)
int index;
- struct cpufreq_policy policy;

- cpufreq_get_policy(&policy, cpu);
- cpufreq_frequency_table_target(&policy, policy.freq_table,
- policy.cur,
+ if (!policy)
+ continue;
+
+ cpufreq_frequency_table_target(policy, policy->freq_table,
+ policy->cur,
CPUFREQ_RELATION_C, &index);
- powernv_cpufreq_target_index(&policy, index);
- cpumask_andnot(&mask, &mask, policy.cpus);
+ powernv_cpufreq_target_index(policy, index);
+ cpumask_andnot(&mask, &mask, policy->cpus);
+ cpufreq_cpu_put(policy);
}
out:
put_online_cpus();
--
2.7.1.410.g6faf27b