sched: When disabling SMT, turn off the odd cores
Previously, we were turning off the even cores, but that gave out core 1,
which was hyperthreaded with core 0.
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/src/corealloc_fcfs.c b/kern/src/corealloc_fcfs.c
index af4ab7c..d250af9 100644
--- a/kern/src/corealloc_fcfs.c
+++ b/kern/src/corealloc_fcfs.c
@@ -25,18 +25,16 @@
/* init the idlecore list. if they turned off hyperthreading, give them the
* odds from 1..max-1. otherwise, give them everything by 0 (default mgmt
* core). TODO: (CG/LL) better LL/CG mgmt */
-#ifndef CONFIG_DISABLE_SMT
- for (int i = 0; i < num_cores; i++)
- if (!is_ll_core(i))
- TAILQ_INSERT_TAIL(&idlecores, pcoreid2spc(i), alloc_next);
-#else
- assert(!(num_cores % 2));
- /* TODO: rethink starting at 1 here. If SMT is really disabled, the entire
- * core of an "ll" core shouldn't be available. */
- for (int i = 1; i < num_cores; i += 2)
- if (!is_ll_core(i))
- TAILQ_INSERT_TAIL(&idlecores, pcoreid2spc(i), alloc_next);
+ for (int i = 0; i < num_cores; i++) {
+ if (is_ll_core(i))
+ continue;
+#ifdef CONFIG_DISABLE_SMT
+ /* Remove all odd cores from consideration for allocation. */
+ if (i % 2 == 1)
+ continue;
#endif /* CONFIG_DISABLE_SMT */
+ TAILQ_INSERT_TAIL(&idlecores, pcoreid2spc(i), alloc_next);
+ }
}
/* Initialize any data associated with allocating cores to a process. */
diff --git a/kern/src/corealloc_packed.c b/kern/src/corealloc_packed.c
index 32b2e95..bd1957d 100644
--- a/kern/src/corealloc_packed.c
+++ b/kern/src/corealloc_packed.c
@@ -190,8 +190,8 @@
continue;
}
#ifdef CONFIG_DISABLE_SMT
- /* Remove all even cores from consideration for allocation. */
- if (i % 2 == 0) {
+ /* Remove all odd cores from consideration for allocation. */
+ if (i % 2 == 1) {
incref_nodes(all_pcores[i].sched_pnode);
continue;
}