aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r--kernel/sched/core.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 5c692a0a555d..13c38837f2cd 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6398,16 +6398,26 @@ static void __sdt_free(const struct cpumask *cpu_map)
6398 struct sd_data *sdd = &tl->data; 6398 struct sd_data *sdd = &tl->data;
6399 6399
6400 for_each_cpu(j, cpu_map) { 6400 for_each_cpu(j, cpu_map) {
6401 struct sched_domain *sd = *per_cpu_ptr(sdd->sd, j); 6401 struct sched_domain *sd;
6402 if (sd && (sd->flags & SD_OVERLAP)) 6402
6403 free_sched_groups(sd->groups, 0); 6403 if (sdd->sd) {
6404 kfree(*per_cpu_ptr(sdd->sd, j)); 6404 sd = *per_cpu_ptr(sdd->sd, j);
6405 kfree(*per_cpu_ptr(sdd->sg, j)); 6405 if (sd && (sd->flags & SD_OVERLAP))
6406 kfree(*per_cpu_ptr(sdd->sgp, j)); 6406 free_sched_groups(sd->groups, 0);
6407 kfree(*per_cpu_ptr(sdd->sd, j));
6408 }
6409
6410 if (sdd->sg)
6411 kfree(*per_cpu_ptr(sdd->sg, j));
6412 if (sdd->sgp)
6413 kfree(*per_cpu_ptr(sdd->sgp, j));
6407 } 6414 }
6408 free_percpu(sdd->sd); 6415 free_percpu(sdd->sd);
6416 sdd->sd = NULL;
6409 free_percpu(sdd->sg); 6417 free_percpu(sdd->sg);
6418 sdd->sg = NULL;
6410 free_percpu(sdd->sgp); 6419 free_percpu(sdd->sgp);
6420 sdd->sgp = NULL;
6411 } 6421 }
6412} 6422}
6413 6423