diff options
author | Damien Zammit <damien@zamaudio.com> | 2024-02-11 12:00:57 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2024-02-11 15:05:32 +0100 |
commit | aadb433981b086bfb4e082757fed1154582d5497 (patch) | |
tree | 286c851c30d398c08f2c0d0e5f925ca3ffa2587e /kern | |
parent | 0232f733a60af52ff901d9af1bb4006fa1765182 (diff) | |
download | gnumach-aadb433981b086bfb4e082757fed1154582d5497.tar.gz gnumach-aadb433981b086bfb4e082757fed1154582d5497.tar.bz2 gnumach-aadb433981b086bfb4e082757fed1154582d5497.zip |
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>
Diffstat (limited to 'kern')
-rw-r--r-- | kern/machine.c | 13 | ||||
-rw-r--r-- | kern/processor.c | 3 | ||||
-rw-r--r-- | kern/processor.h | 3 |
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 */ |