[...]
@@ -1445,9 +1448,24 @@ void sched_init_numa(void)
tl[i] = sched_domain_topology[i];
/*
+ * Ignore the NUMA identity level if it has the same cpumask
+ * as previous level. This is the case for:
+ * - System with last-level-cache (MC) sched domain span a NUMA node.
+ * - System with DIE sched domain span a NUMA node.
+ *
+ * Assume all NUMA nodes are identical, so only check node 0.
+ */
+ if (!cpumask_equal(sched_domains_numa_masks[0][0], tl[i-1].mask(0)))
+ tl[i++] = (struct sched_domain_topology_level){
+ .mask = sd_numa_mask,
+ .numa_level = 0,
+ SD_INIT_NAME(NODE)
+ };
So what you've forgotten to mention is that for those systems where the
LLC == NODE this now superfluous level gets removed by the degenerate
code. Have you verified that does the right thing?
Let me check with that one and get back.