SCHED: fix OOPS when build_sched_domains percpu allocation fails
/kernel/sched.c
blob:eac5ff3f61aa3df6027250ba231002f979639b84 -> blob:84121b333c75066892119806ad6f6cfc74bb55d4
--- kernel/sched.c
+++ kernel/sched.c
@@ -7415,26 +7415,16 @@ static void __sdt_free(const struct cpum
struct sd_data *sdd = &tl->data;
for_each_cpu(j, cpu_map) {
- struct sched_domain *sd;
-
- if (sdd->sd) {
- sd = *per_cpu_ptr(sdd->sd, j);
- if (sd && (sd->flags & SD_OVERLAP))
- free_sched_groups(sd->groups, 0);
- kfree(*per_cpu_ptr(sdd->sd, j));
- }
-
- if (sdd->sg)
- kfree(*per_cpu_ptr(sdd->sg, j));
- if (sdd->sgp)
- kfree(*per_cpu_ptr(sdd->sgp, j));
+ struct sched_domain *sd = *per_cpu_ptr(sdd->sd, j);
+ if (sd && (sd->flags & SD_OVERLAP))
+ free_sched_groups(sd->groups, 0);
+ kfree(*per_cpu_ptr(sdd->sd, j));
+ kfree(*per_cpu_ptr(sdd->sg, j));
+ kfree(*per_cpu_ptr(sdd->sgp, j));
}
free_percpu(sdd->sd);
- sdd->sd = NULL;
free_percpu(sdd->sg);
- sdd->sg = NULL;
free_percpu(sdd->sgp);
- sdd->sgp = NULL;
}
}