From 8d97750eeffca908392f4cb5b29af6f12dddbabc Mon Sep 17 00:00:00 2001 From: "Charles E. Youse" Date: Tue, 24 Sep 2019 11:09:55 -0400 Subject: [PATCH] arch/x86: (Intel64) add z_arch_curr_cpu() to enable CONFIG_SMP=y And set qemu_x86_long board to build with CONFIG_SMP=y by default. Apparently two benchmark tests - latency_measure and sys_kernel - do not work with the SMP scheduler, so those tests are disabled. Signed-off-by: Charles E. Youse --- arch/x86/include/intel64/kernel_arch_func.h | 11 +++++++++++ arch/x86/include/kernel_arch_func.h | 4 ++++ boards/x86/qemu_x86/qemu_x86_long_defconfig | 1 + tests/benchmarks/latency_measure/testcase.yaml | 1 + tests/benchmarks/sys_kernel/testcase.yaml | 1 + 5 files changed, 18 insertions(+) diff --git a/arch/x86/include/intel64/kernel_arch_func.h b/arch/x86/include/intel64/kernel_arch_func.h index f9639c3ba6a..2500393081c 100644 --- a/arch/x86/include/intel64/kernel_arch_func.h +++ b/arch/x86/include/intel64/kernel_arch_func.h @@ -15,6 +15,17 @@ static inline void z_arch_kernel_init(void) /* nothing */; } +static inline struct _cpu *z_arch_curr_cpu(void) +{ + struct _cpu *cpu; + + __asm__ volatile("movq %%gs:(%c1), %0" + : "=r" (cpu) + : "i" (offsetof(x86_tss64_t, cpu))); + + return cpu; +} + #endif /* _ASMLANGUAGE */ #endif /* ZEPHYR_ARCH_X86_INCLUDE_INTEL64_KERNEL_ARCH_FUNC_H_ */ diff --git a/arch/x86/include/kernel_arch_func.h b/arch/x86/include/kernel_arch_func.h index 53ef1f92780..33a7cf6d69c 100644 --- a/arch/x86/include/kernel_arch_func.h +++ b/arch/x86/include/kernel_arch_func.h @@ -12,7 +12,11 @@ #include #endif +#ifdef CONFIG_SMP +#define z_arch_is_in_isr() (z_arch_curr_cpu()->nested != 0U) +#else #define z_arch_is_in_isr() (_kernel.nested != 0U) +#endif #ifndef _ASMLANGUAGE diff --git a/boards/x86/qemu_x86/qemu_x86_long_defconfig b/boards/x86/qemu_x86/qemu_x86_long_defconfig index 40088314121..50fcdd2f5cb 100644 --- a/boards/x86/qemu_x86/qemu_x86_long_defconfig +++ b/boards/x86/qemu_x86/qemu_x86_long_defconfig @@ -14,3 +14,4 @@ CONFIG_UART_CONSOLE=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=25000000 CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_DEBUG_INFO=y +CONFIG_SMP=y diff --git a/tests/benchmarks/latency_measure/testcase.yaml b/tests/benchmarks/latency_measure/testcase.yaml index 175be7496ce..ef9d76101a8 100644 --- a/tests/benchmarks/latency_measure/testcase.yaml +++ b/tests/benchmarks/latency_measure/testcase.yaml @@ -1,5 +1,6 @@ tests: benchmark.latency: arch_whitelist: x86 arm posix + platform_exclude: qemu_x86_long filter: CONFIG_PRINTK tags: benchmark diff --git a/tests/benchmarks/sys_kernel/testcase.yaml b/tests/benchmarks/sys_kernel/testcase.yaml index 36d7869216f..5e73aad7092 100644 --- a/tests/benchmarks/sys_kernel/testcase.yaml +++ b/tests/benchmarks/sys_kernel/testcase.yaml @@ -1,5 +1,6 @@ tests: benchmark.kernel: arch_exclude: nios2 riscv32 xtensa x86_64 + platform_exclude: qemu_x86_long min_ram: 32 tags: benchmark