aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched/core.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2013-06-11 07:02:44 -0400
committerIngo Molnar <mingo@kernel.org>2013-06-19 06:58:46 -0400
commitcd08e9234c987766ad077bba80eb5a07d0855525 (patch)
tree80345d2fe3e4a747b58d0538e64b30743026e426 /kernel/sched/core.c
parent0936629f01bb1b11772db8c36be421365238cbec (diff)
sched: Fix memory leakage in build_sched_groups()
In build_sched_groups() we don't need to call get_group() for cpus which are already covered in previous iterations. Calling get_group() would mark the group used and eventually leak it since we wouldn't connect it and not find it again to free it. This will happen only in cases where sg->cpumask contained more than one cpu (For any topology level). This patch would free sg's memory for all cpus leaving the group leader as the group isn't marked used now. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/7a61e955abdcbb1dfa9fe493f11a5ec53a11ddd3.1370948150.git.viresh.kumar@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r--kernel/sched/core.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 3388387e1330..014c97f00732 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -5357,12 +5357,12 @@ build_sched_groups(struct sched_domain *sd, int cpu)
5357 5357
5358 for_each_cpu(i, span) { 5358 for_each_cpu(i, span) {
5359 struct sched_group *sg; 5359 struct sched_group *sg;
5360 int group = get_group(i, sdd, &sg); 5360 int group, j;
5361 int j;
5362 5361
5363 if (cpumask_test_cpu(i, covered)) 5362 if (cpumask_test_cpu(i, covered))
5364 continue; 5363 continue;
5365 5364
5365 group = get_group(i, sdd, &sg);
5366 cpumask_clear(sched_group_cpus(sg)); 5366 cpumask_clear(sched_group_cpus(sg));
5367 sg->sgp->power = 0; 5367 sg->sgp->power = 0;
5368 cpumask_setall(sched_group_mask(sg)); 5368 cpumask_setall(sched_group_mask(sg));