|
@@ -6405,16 +6405,26 @@ static void __sdt_free(const struct cpumask *cpu_map)
|
|
|
struct sd_data *sdd = &tl->data;
|
|
|
|
|
|
for_each_cpu(j, cpu_map) {
|
|
|
- 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));
|
|
|
+ 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));
|
|
|
}
|
|
|
free_percpu(sdd->sd);
|
|
|
+ sdd->sd = NULL;
|
|
|
free_percpu(sdd->sg);
|
|
|
+ sdd->sg = NULL;
|
|
|
free_percpu(sdd->sgp);
|
|
|
+ sdd->sgp = NULL;
|
|
|
}
|
|
|
}
|
|
|
|