From aadb433981b086bfb4e082757fed1154582d5497 Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sun, 11 Feb 2024 12:00:57 +0000 Subject: 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> --- kern/machine.c | 13 ++++++++++++- kern/processor.c | 3 +++ kern/processor.h | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) (limited to 'kern') 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 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 */ -- cgit v1.2.3