summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2024-02-11 12:00:57 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-02-11 15:05:32 +0100
commitaadb433981b086bfb4e082757fed1154582d5497 (patch)
tree286c851c30d398c08f2c0d0e5f925ca3ffa2587e
parent0232f733a60af52ff901d9af1bb4006fa1765182 (diff)
smp: Create AP processor set and put all APs inside it
This has the effect of running with one cpu only with smp, but has the ability to enable APs in userspace with the right processor set RPCs. Message-ID: <20240211120051.1889789-1-damien@zamaudio.com>
-rw-r--r--kern/machine.c13
-rw-r--r--kern/processor.c3
-rw-r--r--kern/processor.h3
3 files changed, 18 insertions, 1 deletions
diff --git a/kern/machine.c b/kern/machine.c
index 87fbc4d1..f757d146 100644
--- a/kern/machine.c
+++ b/kern/machine.c
@@ -84,6 +84,9 @@ void cpu_up(int cpu)
processor = cpu_to_processor(cpu);
pset_lock(&default_pset);
+#if MACH_HOST
+ pset_lock(slave_pset);
+#endif
s = splsched();
processor_lock(processor);
#if NCPUS > 1
@@ -92,10 +95,18 @@ void cpu_up(int cpu)
ms = &machine_slot[cpu];
ms->running = TRUE;
machine_info.avail_cpus++;
- pset_add_processor(&default_pset, processor);
+#if MACH_HOST
+ if (cpu != 0)
+ pset_add_processor(slave_pset, processor);
+ else
+#endif
+ pset_add_processor(&default_pset, processor);
processor->state = PROCESSOR_RUNNING;
processor_unlock(processor);
splx(s);
+#if MACH_HOST
+ pset_unlock(slave_pset);
+#endif
pset_unlock(&default_pset);
}
diff --git a/kern/processor.c b/kern/processor.c
index 76735381..f06b5d62 100644
--- a/kern/processor.c
+++ b/kern/processor.c
@@ -51,6 +51,7 @@
#if MACH_HOST
#include <kern/slab.h>
struct kmem_cache pset_cache;
+struct processor_set *slave_pset;
#endif /* MACH_HOST */
@@ -124,6 +125,8 @@ void pset_sys_init(void)
ipc_processor_init(processor);
}
}
+
+ processor_set_create(&realhost, &slave_pset, &slave_pset);
}
#endif /* MACH_HOST */
diff --git a/kern/processor.h b/kern/processor.h
index fc204ffa..747badf2 100644
--- a/kern/processor.h
+++ b/kern/processor.h
@@ -85,6 +85,9 @@ struct processor_set {
long sched_load; /* load avg for scheduler */
};
extern struct processor_set default_pset;
+#if MACH_HOST
+extern struct processor_set *slave_pset;
+#endif
struct processor {
struct run_queue runq; /* local runq for this processor */