From 0561b55860f655a863dabc653e5db7b213d8abff Mon Sep 17 00:00:00 2001 From: hujun5 Date: Thu, 28 Mar 2024 09:32:14 +0800 Subject: [PATCH] arm: optimize up_interrupt_context used in armv[6/7/8]-m resson: using percpu storage for g_current_regs or leveraging interrupt status registers to determine if code is running within an interrupt context can enhance performance. Signed-off-by: hujun5 --- arch/arm/include/armv6-m/irq.h | 12 +----------- arch/arm/include/armv7-m/irq.h | 12 +----------- arch/arm/include/armv8-m/irq.h | 12 +----------- 3 files changed, 3 insertions(+), 33 deletions(-) diff --git a/arch/arm/include/armv6-m/irq.h b/arch/arm/include/armv6-m/irq.h index ee40eb119b..752e3ed394 100644 --- a/arch/arm/include/armv6-m/irq.h +++ b/arch/arm/include/armv6-m/irq.h @@ -394,17 +394,7 @@ static inline_function void up_set_current_regs(uint32_t *regs) noinstrument_function static inline_function bool up_interrupt_context(void) { -#ifdef CONFIG_SMP - irqstate_t flags = up_irq_save(); -#endif - - bool ret = up_current_regs() != NULL; - -#ifdef CONFIG_SMP - up_irq_restore(flags); -#endif - - return ret; + return getipsr() != 0; } /**************************************************************************** diff --git a/arch/arm/include/armv7-m/irq.h b/arch/arm/include/armv7-m/irq.h index 53900703b7..88db5d3ba3 100644 --- a/arch/arm/include/armv7-m/irq.h +++ b/arch/arm/include/armv7-m/irq.h @@ -599,17 +599,7 @@ static inline_function void up_set_current_regs(uint32_t *regs) noinstrument_function static inline_function bool up_interrupt_context(void) { -#ifdef CONFIG_SMP - irqstate_t flags = up_irq_save(); -#endif - - bool ret = up_current_regs() != NULL; - -#ifdef CONFIG_SMP - up_irq_restore(flags); -#endif - - return ret; + return getipsr() != 0; } /**************************************************************************** diff --git a/arch/arm/include/armv8-m/irq.h b/arch/arm/include/armv8-m/irq.h index 69763c8664..f14d84f655 100644 --- a/arch/arm/include/armv8-m/irq.h +++ b/arch/arm/include/armv8-m/irq.h @@ -572,17 +572,7 @@ static inline_function void up_set_current_regs(uint32_t *regs) noinstrument_function static inline_function bool up_interrupt_context(void) { -#ifdef CONFIG_SMP - irqstate_t flags = up_irq_save(); -#endif - - bool ret = up_current_regs() != NULL; - -#ifdef CONFIG_SMP - up_irq_restore(flags); -#endif - - return ret; + return getipsr() != 0; } /****************************************************************************