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