[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 gnumach] smp: Create AP processor set and put all APs insi
From: |
Samuel Thibault |
Subject: |
Re: [PATCH v2 gnumach] smp: Create AP processor set and put all APs inside it |
Date: |
Sun, 11 Feb 2024 15:06:12 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Damien Zammit, le dim. 11 févr. 2024 12:00:57 +0000, a ecrit:
> 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.
> ---
> ddb/db_print.c | 10 +++++++---
> kern/machine.c | 13 +++++++++++++
> kern/processor.c | 3 +++
> kern/processor.h | 3 +++
> 4 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/ddb/db_print.c b/ddb/db_print.c
> index 028cb887..c8d85d26 100644
> --- a/ddb/db_print.c
> +++ b/ddb/db_print.c
> @@ -345,10 +345,14 @@ db_show_all_runqs(
> db_expr_t count,
> const char * modif)
> {
> - int i;
> + int i = 0;
> + processor_set_t pset;
>
> - db_printf("Processor set runq:\t");
> - showrq(&default_pset.runq);
> + queue_iterate(&all_psets, pset, processor_set_t, all_psets) {
> + db_printf("Processor set #%d runq:\t", i);
> + showrq(&pset->runq);
> + i++;
> + }
> for (i = 0; i < smp_get_numcpus(); i++) {
> db_printf("Processor #%d runq:\t", i);
> showrq(&cpu_to_processor(i)->runq);
> diff --git a/kern/machine.c b/kern/machine.c
> index 87fbc4d1..7fed1246 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,20 @@ void cpu_up(int cpu)
> ms = &machine_slot[cpu];
> ms->running = TRUE;
> machine_info.avail_cpus++;
> +#if MACH_HOST
> + if (cpu == 0)
> + pset_add_processor(&default_pset, processor);
> + else
> + pset_add_processor(slave_pset, processor);
> +#else
> pset_add_processor(&default_pset, processor);
> +#endif
> 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 */
> --
> 2.43.0
>
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.