SCHED: fix OOPS when build_sched_domains percpu allocation fails
/kernel/sched.c
blob:b4deee3e765cdf35c04bf1e77e9daf3a5c966494 -> blob:7e2c2d25d3b5ca2898c85fb1d1b5c1eaf7eba592
--- kernel/sched.c
+++ kernel/sched.c
@@ -7413,26 +7413,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;
}
}