diff --git a/arch/Kconfig b/arch/Kconfig index 4d94cbf40ac1b..b27288fa7af03 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -492,6 +492,10 @@ config ARCH_HAVE_TESTSET bool default n +config ARCH_HAVE_CPU_INDEX + bool + default n + config ARCH_HAVE_THREAD_LOCAL bool default n diff --git a/arch/arm/include/arm/irq.h b/arch/arm/include/arm/irq.h index 246410e47d4f6..7566ce699dbde 100644 --- a/arch/arm/include/arm/irq.h +++ b/arch/arm/include/arm/irq.h @@ -243,22 +243,30 @@ static inline irqstate_t up_irq_enable(void) * ****************************************************************************/ -#ifdef CONFIG_SMP +#if defined(CONFIG_SMP) || defined(CONFIG_ARCH_HAVE_CPU_INDEX) int up_cpu_index(void) noinstrument_function; #else # define up_cpu_index() 0 -#endif /* CONFIG_SMP */ +#endif /* CONFIG_SMP || CONFIG_ARCH_HAVE_CPU_INDEX */ noinstrument_function static inline_function uint32_t *up_current_regs(void) { +#ifdef CONFIG_SMP return (uint32_t *)g_current_regs[up_cpu_index()]; +#else + return (uint32_t *)g_current_regs[0]; +#endif } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { +#ifdef CONFIG_SMP g_current_regs[up_cpu_index()] = regs; +#else + g_current_regs[0] = regs; +#endif } noinstrument_function diff --git a/arch/arm/include/armv6-m/irq.h b/arch/arm/include/armv6-m/irq.h index 6d142accfa988..764934c4e0b69 100644 --- a/arch/arm/include/armv6-m/irq.h +++ b/arch/arm/include/armv6-m/irq.h @@ -354,11 +354,11 @@ static inline void setcontrol(uint32_t control) * ****************************************************************************/ -#ifdef CONFIG_SMP +#if defined(CONFIG_SMP) || defined(CONFIG_ARCH_HAVE_CPU_INDEX) int up_cpu_index(void) noinstrument_function; #else # define up_cpu_index() 0 -#endif /* CONFIG_SMP */ +#endif /* CONFIG_SMP || CONFIG_ARCH_HAVE_CPU_INDEX */ static inline_function uint32_t up_getsp(void) { @@ -376,13 +376,21 @@ static inline_function uint32_t up_getsp(void) noinstrument_function static inline_function uint32_t *up_current_regs(void) { +#ifdef CONFIG_SMP return (uint32_t *)g_current_regs[up_cpu_index()]; +#else + return (uint32_t *)g_current_regs[0]; +#endif } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { +#ifdef CONFIG_SMP g_current_regs[up_cpu_index()] = regs; +#else + g_current_regs[0] = regs; +#endif } noinstrument_function diff --git a/arch/arm/include/armv7-m/irq.h b/arch/arm/include/armv7-m/irq.h index c387899f6053f..7e821c9a76fd8 100644 --- a/arch/arm/include/armv7-m/irq.h +++ b/arch/arm/include/armv7-m/irq.h @@ -559,11 +559,11 @@ static inline void setcontrol(uint32_t control) * ****************************************************************************/ -#ifdef CONFIG_SMP +#if defined(CONFIG_SMP) || defined(CONFIG_ARCH_HAVE_CPU_INDEX) int up_cpu_index(void) noinstrument_function; #else # define up_cpu_index() 0 -#endif /* CONFIG_SMP */ +#endif /* CONFIG_SMP || CONFIG_ARCH_HAVE_CPU_INDEX */ static inline_function uint32_t up_getsp(void) { @@ -581,13 +581,21 @@ static inline_function uint32_t up_getsp(void) noinstrument_function static inline_function uint32_t *up_current_regs(void) { +#ifdef CONFIG_SMP return (uint32_t *)g_current_regs[up_cpu_index()]; +#else + return (uint32_t *)g_current_regs[0]; +#endif } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { +#ifdef CONFIG_SMP g_current_regs[up_cpu_index()] = regs; +#else + g_current_regs[0] = regs; +#endif } noinstrument_function diff --git a/arch/arm/include/armv8-m/irq.h b/arch/arm/include/armv8-m/irq.h index fb23d569b7db8..090ef7db1b99e 100644 --- a/arch/arm/include/armv8-m/irq.h +++ b/arch/arm/include/armv8-m/irq.h @@ -532,11 +532,11 @@ static inline void setcontrol(uint32_t control) * ****************************************************************************/ -#ifdef CONFIG_SMP +#if defined(CONFIG_SMP) || defined(CONFIG_ARCH_HAVE_CPU_INDEX) int up_cpu_index(void) noinstrument_function; #else # define up_cpu_index() 0 -#endif /* CONFIG_SMP */ +#endif /* CONFIG_SMP || CONFIG_ARCH_HAVE_CPU_INDEX */ static inline_function uint32_t up_getsp(void) { @@ -554,13 +554,21 @@ static inline_function uint32_t up_getsp(void) noinstrument_function static inline_function uint32_t *up_current_regs(void) { +#ifdef CONFIG_SMP return (uint32_t *)g_current_regs[up_cpu_index()]; +#else + return (uint32_t *)g_current_regs[0]; +#endif } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { +#ifdef CONFIG_SMP g_current_regs[up_cpu_index()] = regs; +#else + g_current_regs[0] = regs; +#endif } noinstrument_function diff --git a/arch/arm/include/tlsr82/irq.h b/arch/arm/include/tlsr82/irq.h index 751baa6f61d74..44beb60c4994e 100644 --- a/arch/arm/include/tlsr82/irq.h +++ b/arch/arm/include/tlsr82/irq.h @@ -259,11 +259,11 @@ static inline uint32_t getcontrol(void) * ****************************************************************************/ -#ifdef CONFIG_SMP +#if defined(CONFIG_SMP) || defined(CONFIG_ARCH_HAVE_CPU_INDEX) int up_cpu_index(void) noinstrument_function; #else # define up_cpu_index() 0 -#endif /* CONFIG_SMP */ +#endif /* CONFIG_SMP || CONFIG_ARCH_HAVE_CPU_INDEX */ static inline_function uint32_t up_getsp(void) { @@ -281,13 +281,21 @@ static inline_function uint32_t up_getsp(void) noinstrument_function static inline_function uint32_t *up_current_regs(void) { +#ifdef CONFIG_SMP return (uint32_t *)g_current_regs[up_cpu_index()]; +#else + return (uint32_t *)g_current_regs[0]; +#endif } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { +#ifdef CONFIG_SMP g_current_regs[up_cpu_index()] = regs; +#else + g_current_regs[0] = regs; +#endif } noinstrument_function