diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-09-19 21:51:22 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-09-19 21:55:57 +0200 |
commit | a76bc939142f61e615fcc39fc940961e39a26207 (patch) | |
tree | 5224c805761fd68311de079f32b7c4ef0c613bf6 /i386/i386at/model_dep.c | |
parent | b26973c8018b99bcf8fb071eb2aedc634039eea1 (diff) | |
download | gnumach-a76bc939142f61e615fcc39fc940961e39a26207.tar.gz gnumach-a76bc939142f61e615fcc39fc940961e39a26207.tar.bz2 gnumach-a76bc939142f61e615fcc39fc940961e39a26207.zip |
smp: Add --enable-ncpus option and fix build
* configfrag.ac (--enable-ncpus): Add option to set $mach_ncpus.
* i386/i386/cpu_number.h (CPU_NUMBER, cpu_number): New macros, set to 0 for
now.
* i386/i386/db_interface.c (cpu_interrupt_to_db): New function.
* i386/i386/db_interface.h (cpu_interrupt_to_db): New declaration.
* i386/i386/mp_desc.c (int_stack_base): New array.
(intel_startCPU): New function.
* i386/i386at/model_dep.c: Include <i386/smp.h>
(int_stack_top, int_stack_base): Turn into arrays
(i386at_init): Update accesses accordingly.
* i386/i386at/model_dep.h (int_stack_top, int_stack_base, ON_INT_STACK):
Likewise.
* i386/intel/pmap.c (cpus_active, cpus_idle, cpu_update_needed): Add
variables.
* i386/intel/pmap.h (cpus_active, cpus_idle, cpu_update_needed): Mark
extern.
* kern/cpu_number.h: Include <machine/cpu_number.h>
* linux/dev/arch/i386/kernel/irq.c (local_bh_count, local_irq_count):
Hardcode to the address of intr_count. We will not use the Linux code in
SMP mode anyway.
Diffstat (limited to 'i386/i386at/model_dep.c')
-rw-r--r-- | i386/i386at/model_dep.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c index a13b46af..346f2b9c 100644 --- a/i386/i386at/model_dep.c +++ b/i386/i386at/model_dep.c @@ -65,6 +65,7 @@ #include <i386/vm_param.h> #include <i386/locore.h> #include <i386/model_dep.h> +#include <i386/smp.h> #include <i386at/autoconf.h> #include <i386at/biosmem.h> #include <i386at/elf.h> @@ -133,7 +134,9 @@ boolean_t rebootflag = FALSE; /* exported to kdintr */ /* Interrupt stack. */ static char int_stack[KERNEL_STACK_SIZE] __aligned(KERNEL_STACK_SIZE); -vm_offset_t int_stack_top, int_stack_base; +#if NCPUS <= 1 +vm_offset_t int_stack_top[1], int_stack_base[1]; +#endif #ifdef LINUX_DEV extern void linux_init(void); @@ -532,8 +535,8 @@ i386at_init(void) hyp_p2m_init(); #endif /* MACH_XEN */ - int_stack_base = (vm_offset_t)&int_stack; - int_stack_top = int_stack_base + KERNEL_STACK_SIZE - 4; + int_stack_base[0] = (vm_offset_t)&int_stack; + int_stack_top[0] = int_stack_base[0] + KERNEL_STACK_SIZE - 4; } /* |