diff options
Diffstat (limited to 'kernel/sched/core.c')
| -rw-r--r-- | kernel/sched/core.c | 22 |
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 | ||
