|
@@ -7774,17 +7774,21 @@ void partition_sched_domains(int ndoms_new, cpumask_t *doms_new,
|
|
struct sched_domain_attr *dattr_new)
|
|
struct sched_domain_attr *dattr_new)
|
|
{
|
|
{
|
|
int i, j, n;
|
|
int i, j, n;
|
|
|
|
+ int new_topology;
|
|
|
|
|
|
mutex_lock(&sched_domains_mutex);
|
|
mutex_lock(&sched_domains_mutex);
|
|
|
|
|
|
/* always unregister in case we don't destroy any domains */
|
|
/* always unregister in case we don't destroy any domains */
|
|
unregister_sched_domain_sysctl();
|
|
unregister_sched_domain_sysctl();
|
|
|
|
|
|
|
|
+ /* Let architecture update cpu core mappings. */
|
|
|
|
+ new_topology = arch_update_cpu_topology();
|
|
|
|
+
|
|
n = doms_new ? ndoms_new : 0;
|
|
n = doms_new ? ndoms_new : 0;
|
|
|
|
|
|
/* Destroy deleted domains */
|
|
/* Destroy deleted domains */
|
|
for (i = 0; i < ndoms_cur; i++) {
|
|
for (i = 0; i < ndoms_cur; i++) {
|
|
- for (j = 0; j < n; j++) {
|
|
|
|
|
|
+ for (j = 0; j < n && !new_topology; j++) {
|
|
if (cpus_equal(doms_cur[i], doms_new[j])
|
|
if (cpus_equal(doms_cur[i], doms_new[j])
|
|
&& dattrs_equal(dattr_cur, i, dattr_new, j))
|
|
&& dattrs_equal(dattr_cur, i, dattr_new, j))
|
|
goto match1;
|
|
goto match1;
|
|
@@ -7804,7 +7808,7 @@ match1:
|
|
|
|
|
|
/* Build new domains */
|
|
/* Build new domains */
|
|
for (i = 0; i < ndoms_new; i++) {
|
|
for (i = 0; i < ndoms_new; i++) {
|
|
- for (j = 0; j < ndoms_cur; j++) {
|
|
|
|
|
|
+ for (j = 0; j < ndoms_cur && !new_topology; j++) {
|
|
if (cpus_equal(doms_new[i], doms_cur[j])
|
|
if (cpus_equal(doms_new[i], doms_cur[j])
|
|
&& dattrs_equal(dattr_new, i, dattr_cur, j))
|
|
&& dattrs_equal(dattr_new, i, dattr_cur, j))
|
|
goto match2;
|
|
goto match2;
|