diff --git a/arch/arm/src/a1x/a1x_irq.c b/arch/arm/src/a1x/a1x_irq.c index 3ac81806242..c9ba8cc7097 100644 --- a/arch/arm/src/a1x/a1x_irq.c +++ b/arch/arm/src/a1x/a1x_irq.c @@ -151,6 +151,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif diff --git a/arch/arm/src/am335x/am335x_irq.c b/arch/arm/src/am335x/am335x_irq.c index 9e9b52f91b5..2473f7f753b 100644 --- a/arch/arm/src/am335x/am335x_irq.c +++ b/arch/arm/src/am335x/am335x_irq.c @@ -125,6 +125,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/armv8-r/arm_doirq.c b/arch/arm/src/armv8-r/arm_doirq.c index 69fcffc29e2..39803ce4eb0 100644 --- a/arch/arm/src/armv8-r/arm_doirq.c +++ b/arch/arm/src/armv8-r/arm_doirq.c @@ -127,6 +127,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/at32/at32_irq.c b/arch/arm/src/at32/at32_irq.c index 96f11fb247b..ef29202b477 100644 --- a/arch/arm/src/at32/at32_irq.c +++ b/arch/arm/src/at32/at32_irq.c @@ -364,6 +364,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/c5471/c5471_irq.c b/arch/arm/src/c5471/c5471_irq.c index 4f2ea1550e7..985265cddf5 100644 --- a/arch/arm/src/c5471/c5471_irq.c +++ b/arch/arm/src/c5471/c5471_irq.c @@ -158,6 +158,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/common/arm_checkstack.c b/arch/arm/src/common/arm_checkstack.c index 918b65d872d..6b80918e9bb 100644 --- a/arch/arm/src/common/arm_checkstack.c +++ b/arch/arm/src/common/arm_checkstack.c @@ -49,6 +49,31 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: arm_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void arm_color_intstack(void) +{ +#ifdef CONFIG_SMP + int cpu; + + for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) + { + arm_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); + } +#else + arm_stack_color((void *)g_intstackalloc, INTSTACK_SIZE); +#endif +} +#endif + /**************************************************************************** * Name: arm_stack_check * diff --git a/arch/arm/src/common/arm_initialize.c b/arch/arm/src/common/arm_initialize.c index c5c43507467..1d8362c5b68 100644 --- a/arch/arm/src/common/arm_initialize.c +++ b/arch/arm/src/common/arm_initialize.c @@ -38,37 +38,6 @@ volatile bool g_interrupt_context[CONFIG_SMP_NCPUS]; -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: arm_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 3 -static inline void arm_color_intstack(void) -{ -#ifdef CONFIG_SMP - int cpu; - - for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) - { - arm_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); - } -#else - arm_stack_color((void *)g_intstackalloc, INTSTACK_SIZE); -#endif -} -#else -# define arm_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -98,10 +67,6 @@ void up_initialize(void) arm_initialize_stack(); #endif - /* Colorize the interrupt stack */ - - arm_color_intstack(); - /* Add any extra memory fragments to the memory manager */ arm_addregion(); diff --git a/arch/arm/src/common/arm_internal.h b/arch/arm/src/common/arm_internal.h index bb8ddc8e9bf..a97c094e0af 100644 --- a/arch/arm/src/common/arm_internal.h +++ b/arch/arm/src/common/arm_internal.h @@ -479,6 +479,13 @@ size_t arm_stack_check(void *stackbase, size_t nbytes); void arm_stack_color(void *stackbase, size_t nbytes); #endif +#if defined(CONFIG_STACK_COLORATION) &&\ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void arm_color_intstack(void); +#else +# define arm_color_intstack() +#endif + #ifdef CONFIG_ARCH_TRUSTZONE_SECURE int arm_gen_nonsecurefault(int irq, uint32_t *regs); #else diff --git a/arch/arm/src/csk6/csk6_irq.c b/arch/arm/src/csk6/csk6_irq.c index 53036952517..630d4f571fd 100644 --- a/arch/arm/src/csk6/csk6_irq.c +++ b/arch/arm/src/csk6/csk6_irq.c @@ -208,6 +208,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/cxd32xx/cxd32_irq.c b/arch/arm/src/cxd32xx/cxd32_irq.c index 33ce7c9a365..5069ec1bd2d 100644 --- a/arch/arm/src/cxd32xx/cxd32_irq.c +++ b/arch/arm/src/cxd32xx/cxd32_irq.c @@ -317,6 +317,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/cxd56xx/cxd56_irq.c b/arch/arm/src/cxd56xx/cxd56_irq.c index ff240005e11..4ec7be8b8fa 100644 --- a/arch/arm/src/cxd56xx/cxd56_irq.c +++ b/arch/arm/src/cxd56xx/cxd56_irq.c @@ -368,6 +368,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/dm320/dm320_irq.c b/arch/arm/src/dm320/dm320_irq.c index f3b7bc16e87..0db4007f9e5 100644 --- a/arch/arm/src/dm320/dm320_irq.c +++ b/arch/arm/src/dm320/dm320_irq.c @@ -91,6 +91,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/efm32/efm32_irq.c b/arch/arm/src/efm32/efm32_irq.c index 990260d98c4..09f3654e5c5 100644 --- a/arch/arm/src/efm32/efm32_irq.c +++ b/arch/arm/src/efm32/efm32_irq.c @@ -366,6 +366,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/eoss3/eoss3_irq.c b/arch/arm/src/eoss3/eoss3_irq.c index 575656ee31d..dbefa59e6ff 100644 --- a/arch/arm/src/eoss3/eoss3_irq.c +++ b/arch/arm/src/eoss3/eoss3_irq.c @@ -347,6 +347,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/gd32f4/gd32f4xx_irq.c b/arch/arm/src/gd32f4/gd32f4xx_irq.c index bb091e76311..0c4db16ea99 100644 --- a/arch/arm/src/gd32f4/gd32f4xx_irq.c +++ b/arch/arm/src/gd32f4/gd32f4xx_irq.c @@ -371,6 +371,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/goldfish/goldfish_irq.c b/arch/arm/src/goldfish/goldfish_irq.c index f8b50a299bc..4e0498fbd28 100644 --- a/arch/arm/src/goldfish/goldfish_irq.c +++ b/arch/arm/src/goldfish/goldfish_irq.c @@ -124,6 +124,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/imx1/imx_irq.c b/arch/arm/src/imx1/imx_irq.c index 0b4439b91c3..57c9c7f9cfd 100644 --- a/arch/arm/src/imx1/imx_irq.c +++ b/arch/arm/src/imx1/imx_irq.c @@ -63,6 +63,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/imx6/imx_irq.c b/arch/arm/src/imx6/imx_irq.c index 4c43ea1caba..a17edc33771 100644 --- a/arch/arm/src/imx6/imx_irq.c +++ b/arch/arm/src/imx6/imx_irq.c @@ -149,6 +149,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/imxrt/imxrt_irq.c b/arch/arm/src/imxrt/imxrt_irq.c index 18da0f14881..fe0634b9b21 100644 --- a/arch/arm/src/imxrt/imxrt_irq.c +++ b/arch/arm/src/imxrt/imxrt_irq.c @@ -510,6 +510,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/kinetis/kinetis_irq.c b/arch/arm/src/kinetis/kinetis_irq.c index 796d8f4947b..6f8d4633345 100644 --- a/arch/arm/src/kinetis/kinetis_irq.c +++ b/arch/arm/src/kinetis/kinetis_irq.c @@ -398,6 +398,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/kl/kl_irq.c b/arch/arm/src/kl/kl_irq.c index 064fe13089d..0a2f0198646 100644 --- a/arch/arm/src/kl/kl_irq.c +++ b/arch/arm/src/kl/kl_irq.c @@ -222,6 +222,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/lc823450/lc823450_irq.c b/arch/arm/src/lc823450/lc823450_irq.c index 43eba02df09..24acd6ac6b6 100644 --- a/arch/arm/src/lc823450/lc823450_irq.c +++ b/arch/arm/src/lc823450/lc823450_irq.c @@ -525,6 +525,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_irq.c b/arch/arm/src/lpc17xx_40xx/lpc17_40_irq.c index 1dfbc899c0d..154b85396df 100644 --- a/arch/arm/src/lpc17xx_40xx/lpc17_40_irq.c +++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_irq.c @@ -371,6 +371,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/lpc214x/lpc214x_irq.c b/arch/arm/src/lpc214x/lpc214x_irq.c index f25b40e730e..59f62447ebd 100644 --- a/arch/arm/src/lpc214x/lpc214x_irq.c +++ b/arch/arm/src/lpc214x/lpc214x_irq.c @@ -74,6 +74,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/lpc2378/lpc23xx_irq.c b/arch/arm/src/lpc2378/lpc23xx_irq.c index ca107413af4..f998ed50969 100644 --- a/arch/arm/src/lpc2378/lpc23xx_irq.c +++ b/arch/arm/src/lpc2378/lpc23xx_irq.c @@ -87,6 +87,7 @@ void up_irqinitialize(void) /* Enable global ARM interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/lpc31xx/lpc31_irq.c b/arch/arm/src/lpc31xx/lpc31_irq.c index 8e91e33c545..b4ccae846e5 100644 --- a/arch/arm/src/lpc31xx/lpc31_irq.c +++ b/arch/arm/src/lpc31xx/lpc31_irq.c @@ -87,6 +87,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/lpc43xx/lpc43_irq.c b/arch/arm/src/lpc43xx/lpc43_irq.c index fc5440d984b..37bbd0c5483 100644 --- a/arch/arm/src/lpc43xx/lpc43_irq.c +++ b/arch/arm/src/lpc43xx/lpc43_irq.c @@ -351,6 +351,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/lpc54xx/lpc54_irq.c b/arch/arm/src/lpc54xx/lpc54_irq.c index ccb7a4b1a6a..42c1d039d3e 100644 --- a/arch/arm/src/lpc54xx/lpc54_irq.c +++ b/arch/arm/src/lpc54xx/lpc54_irq.c @@ -356,6 +356,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/max326xx/common/max326_irq.c b/arch/arm/src/max326xx/common/max326_irq.c index aef91ba7118..ea17f11931d 100644 --- a/arch/arm/src/max326xx/common/max326_irq.c +++ b/arch/arm/src/max326xx/common/max326_irq.c @@ -356,6 +356,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/moxart/moxart_irq.c b/arch/arm/src/moxart/moxart_irq.c index a3a00aeb739..8c85e5f616b 100644 --- a/arch/arm/src/moxart/moxart_irq.c +++ b/arch/arm/src/moxart/moxart_irq.c @@ -116,6 +116,7 @@ void up_irqinitialize(void) getreg32(0x98800020)); #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/mps/mps_irq.c b/arch/arm/src/mps/mps_irq.c index 82796fc2016..c2487ac803f 100644 --- a/arch/arm/src/mps/mps_irq.c +++ b/arch/arm/src/mps/mps_irq.c @@ -251,6 +251,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/mx8mp/mx8mp_irq.c b/arch/arm/src/mx8mp/mx8mp_irq.c index 9ed6371f8d2..18517dffe81 100644 --- a/arch/arm/src/mx8mp/mx8mp_irq.c +++ b/arch/arm/src/mx8mp/mx8mp_irq.c @@ -416,6 +416,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/nrf52/nrf52_irq.c b/arch/arm/src/nrf52/nrf52_irq.c index bece0cf0f98..19f25a1abed 100644 --- a/arch/arm/src/nrf52/nrf52_irq.c +++ b/arch/arm/src/nrf52/nrf52_irq.c @@ -362,6 +362,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/nrf53/nrf53_irq.c b/arch/arm/src/nrf53/nrf53_irq.c index 019fb099656..6f7afe4808e 100644 --- a/arch/arm/src/nrf53/nrf53_irq.c +++ b/arch/arm/src/nrf53/nrf53_irq.c @@ -360,6 +360,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/nrf91/nrf91_irq.c b/arch/arm/src/nrf91/nrf91_irq.c index d621e9db60e..8c8d4082e8a 100644 --- a/arch/arm/src/nrf91/nrf91_irq.c +++ b/arch/arm/src/nrf91/nrf91_irq.c @@ -368,6 +368,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/nuc1xx/nuc_irq.c b/arch/arm/src/nuc1xx/nuc_irq.c index 7c126fd7b80..8b1a6b31c56 100644 --- a/arch/arm/src/nuc1xx/nuc_irq.c +++ b/arch/arm/src/nuc1xx/nuc_irq.c @@ -214,6 +214,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/phy62xx/irq.c b/arch/arm/src/phy62xx/irq.c index 534711797ce..e1b4f0b2641 100644 --- a/arch/arm/src/phy62xx/irq.c +++ b/arch/arm/src/phy62xx/irq.c @@ -345,6 +345,7 @@ void up_irqinitialize(void) /* svc(SVC_CALL_WR); */ + arm_color_intstack(); up_irq_enable(); #endif diff --git a/arch/arm/src/qemu/qemu_irq.c b/arch/arm/src/qemu/qemu_irq.c index 06530b3d501..fbb5665ee63 100644 --- a/arch/arm/src/qemu/qemu_irq.c +++ b/arch/arm/src/qemu/qemu_irq.c @@ -130,6 +130,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/rp2040/rp2040_irq.c b/arch/arm/src/rp2040/rp2040_irq.c index 73ba14c062d..92fd92b636c 100644 --- a/arch/arm/src/rp2040/rp2040_irq.c +++ b/arch/arm/src/rp2040/rp2040_irq.c @@ -261,6 +261,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/rtl8720c/ameba_nvic.c b/arch/arm/src/rtl8720c/ameba_nvic.c index f5d9e008b85..66a33c1b534 100644 --- a/arch/arm/src/rtl8720c/ameba_nvic.c +++ b/arch/arm/src/rtl8720c/ameba_nvic.c @@ -369,6 +369,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); } diff --git a/arch/arm/src/s32k1xx/s32k11x/s32k11x_irq.c b/arch/arm/src/s32k1xx/s32k11x/s32k11x_irq.c index bae9c8104b7..5b165c87b1f 100644 --- a/arch/arm/src/s32k1xx/s32k11x/s32k11x_irq.c +++ b/arch/arm/src/s32k1xx/s32k11x/s32k11x_irq.c @@ -177,6 +177,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/s32k1xx/s32k14x/s32k14x_irq.c b/arch/arm/src/s32k1xx/s32k14x/s32k14x_irq.c index af04934b6ed..d9c24b33cde 100644 --- a/arch/arm/src/s32k1xx/s32k14x/s32k14x_irq.c +++ b/arch/arm/src/s32k1xx/s32k14x/s32k14x_irq.c @@ -391,6 +391,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/s32k3xx/s32k3xx_irq.c b/arch/arm/src/s32k3xx/s32k3xx_irq.c index 403970c60ee..8c131853266 100644 --- a/arch/arm/src/s32k3xx/s32k3xx_irq.c +++ b/arch/arm/src/s32k3xx/s32k3xx_irq.c @@ -396,6 +396,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/sam34/sam_irq.c b/arch/arm/src/sam34/sam_irq.c index dc139a62fa3..eeb0f34b707 100644 --- a/arch/arm/src/sam34/sam_irq.c +++ b/arch/arm/src/sam34/sam_irq.c @@ -420,6 +420,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/sama5/sam_irq.c b/arch/arm/src/sama5/sam_irq.c index ba737824b8d..d2e41612dc3 100644 --- a/arch/arm/src/sama5/sam_irq.c +++ b/arch/arm/src/sama5/sam_irq.c @@ -536,6 +536,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/samd2l2/sam_irq.c b/arch/arm/src/samd2l2/sam_irq.c index af43983f676..6d50aeeb01c 100644 --- a/arch/arm/src/samd2l2/sam_irq.c +++ b/arch/arm/src/samd2l2/sam_irq.c @@ -170,6 +170,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/samd5e5/sam_irq.c b/arch/arm/src/samd5e5/sam_irq.c index bee8201d75b..a848dcc2c3e 100644 --- a/arch/arm/src/samd5e5/sam_irq.c +++ b/arch/arm/src/samd5e5/sam_irq.c @@ -505,6 +505,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable global interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/samv7/sam_irq.c b/arch/arm/src/samv7/sam_irq.c index 3ab7cfb1b61..b2bb281ebeb 100644 --- a/arch/arm/src/samv7/sam_irq.c +++ b/arch/arm/src/samv7/sam_irq.c @@ -429,6 +429,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32/stm32_irq.c b/arch/arm/src/stm32/stm32_irq.c index b058ce23e8c..f5e0f26c755 100644 --- a/arch/arm/src/stm32/stm32_irq.c +++ b/arch/arm/src/stm32/stm32_irq.c @@ -365,6 +365,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32f0l0g0/stm32_irq.c b/arch/arm/src/stm32f0l0g0/stm32_irq.c index 1dde9583b5f..019f21ffe5d 100644 --- a/arch/arm/src/stm32f0l0g0/stm32_irq.c +++ b/arch/arm/src/stm32f0l0g0/stm32_irq.c @@ -223,6 +223,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32f7/stm32_irq.c b/arch/arm/src/stm32f7/stm32_irq.c index af496f93370..e5b899754ee 100644 --- a/arch/arm/src/stm32f7/stm32_irq.c +++ b/arch/arm/src/stm32f7/stm32_irq.c @@ -464,6 +464,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32h5/stm32_irq.c b/arch/arm/src/stm32h5/stm32_irq.c index 2b1a1a58629..1dd35a17514 100644 --- a/arch/arm/src/stm32h5/stm32_irq.c +++ b/arch/arm/src/stm32h5/stm32_irq.c @@ -337,6 +337,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32h7/stm32_irq.c b/arch/arm/src/stm32h7/stm32_irq.c index 88bb41631ca..d5cb73fb1e9 100644 --- a/arch/arm/src/stm32h7/stm32_irq.c +++ b/arch/arm/src/stm32h7/stm32_irq.c @@ -486,6 +486,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32l4/stm32l4_irq.c b/arch/arm/src/stm32l4/stm32l4_irq.c index 7253e47555c..59c652a19f9 100644 --- a/arch/arm/src/stm32l4/stm32l4_irq.c +++ b/arch/arm/src/stm32l4/stm32l4_irq.c @@ -352,6 +352,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32l5/stm32l5_irq.c b/arch/arm/src/stm32l5/stm32l5_irq.c index 8a5d14483c5..3be60427616 100644 --- a/arch/arm/src/stm32l5/stm32l5_irq.c +++ b/arch/arm/src/stm32l5/stm32l5_irq.c @@ -337,6 +337,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32u5/stm32_irq.c b/arch/arm/src/stm32u5/stm32_irq.c index 74bccf5143c..298fa683cbd 100644 --- a/arch/arm/src/stm32u5/stm32_irq.c +++ b/arch/arm/src/stm32u5/stm32_irq.c @@ -337,6 +337,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32wb/stm32wb_irq.c b/arch/arm/src/stm32wb/stm32wb_irq.c index edf2c66dc64..6a80325896f 100644 --- a/arch/arm/src/stm32wb/stm32wb_irq.c +++ b/arch/arm/src/stm32wb/stm32wb_irq.c @@ -355,6 +355,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/stm32wl5/stm32wl5_irq.c b/arch/arm/src/stm32wl5/stm32wl5_irq.c index 32c62e4adcb..31cda48b16f 100644 --- a/arch/arm/src/stm32wl5/stm32wl5_irq.c +++ b/arch/arm/src/stm32wl5/stm32wl5_irq.c @@ -350,6 +350,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/str71x/str71x_irq.c b/arch/arm/src/str71x/str71x_irq.c index 81405f5583b..e33532d012c 100644 --- a/arch/arm/src/str71x/str71x_irq.c +++ b/arch/arm/src/str71x/str71x_irq.c @@ -74,6 +74,7 @@ void up_irqinitialize(void) /* Enable global ARM interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_restore(PSR_MODE_SYS | PSR_F_BIT); #endif } diff --git a/arch/arm/src/tiva/common/tiva_irq.c b/arch/arm/src/tiva/common/tiva_irq.c index ff68df70dd9..033a52f8250 100644 --- a/arch/arm/src/tiva/common/tiva_irq.c +++ b/arch/arm/src/tiva/common/tiva_irq.c @@ -480,6 +480,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/tlsr82/tlsr82_irq.c b/arch/arm/src/tlsr82/tlsr82_irq.c index 09d3c0a6ece..6b1f382d133 100644 --- a/arch/arm/src/tlsr82/tlsr82_irq.c +++ b/arch/arm/src/tlsr82/tlsr82_irq.c @@ -49,6 +49,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm_color_intstack(); up_irq_enable(); } diff --git a/arch/arm/src/tms570/tms570_irq.c b/arch/arm/src/tms570/tms570_irq.c index f54b00c98b0..e3b149bef80 100644 --- a/arch/arm/src/tms570/tms570_irq.c +++ b/arch/arm/src/tms570/tms570_irq.c @@ -157,6 +157,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts globally */ + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm/src/xmc4/xmc4_irq.c b/arch/arm/src/xmc4/xmc4_irq.c index 7270e9f86a0..f13f822543d 100644 --- a/arch/arm/src/xmc4/xmc4_irq.c +++ b/arch/arm/src/xmc4/xmc4_irq.c @@ -401,6 +401,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + arm_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm64/src/common/arm64_doirq.c b/arch/arm64/src/common/arm64_doirq.c index 5d3043b2d09..267e736f266 100644 --- a/arch/arm64/src/common/arm64_doirq.c +++ b/arch/arm64/src/common/arm64_doirq.c @@ -44,6 +44,37 @@ #include "arm64_gic.h" #include "arm64_fatal.h" +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: arm64_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 3 +static inline void arm64_color_intstack(void) +{ +#ifdef CONFIG_SMP + int cpu; + + for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) + { + arm64_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); + } +#else + arm64_stack_color((void *)g_interrupt_stack, INTSTACK_SIZE); +#endif +} +#else +# define arm64_color_intstack() +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -149,6 +180,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + arm64_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/arm64/src/common/arm64_initialize.c b/arch/arm64/src/common/arm64_initialize.c index 9354e2a30c8..a666e5f1b54 100644 --- a/arch/arm64/src/common/arm64_initialize.c +++ b/arch/arm64/src/common/arm64_initialize.c @@ -99,33 +99,6 @@ uintptr_t up_get_intstackbase(int cpu) } #endif -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 3 -static void up_color_intstack(void) -{ -#ifdef CONFIG_SMP - int cpu; - - for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) - { - arm64_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); - } -#else - arm64_stack_color((void *)g_interrupt_stack, INTSTACK_SIZE); -#endif -} -#else -# define up_color_intstack() -#endif - /**************************************************************************** * Name: arm64_panic_disable_fpu * @@ -162,10 +135,6 @@ int arm64_panic_disable_fpu(struct notifier_block *block, void up_initialize(void) { - /* Initialize global variables */ - - up_color_intstack(); - /* Add any extra memory fragments to the memory manager */ arm64_addregion(); diff --git a/arch/avr/src/at32uc3/at32uc3_irq.c b/arch/avr/src/at32uc3/at32uc3_irq.c index dde918347e7..dcd4aec5e1d 100644 --- a/arch/avr/src/at32uc3/at32uc3_irq.c +++ b/arch/avr/src/at32uc3/at32uc3_irq.c @@ -221,6 +221,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + avr_color_intstack(); up_irq_restore(0); #endif } diff --git a/arch/avr/src/avr/avr_checkstack.c b/arch/avr/src/avr/avr_checkstack.c index 039a8eadcc5..335afb3ca77 100644 --- a/arch/avr/src/avr/avr_checkstack.c +++ b/arch/avr/src/avr/avr_checkstack.c @@ -51,6 +51,30 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: avr_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void avr_color_intstack(void) +{ + uint8_t *ptr = g_intstackalloc; + ssize_t size; + + for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~3); + size > 0; + size -= sizeof(uint8_t)) + { + *ptr++ = STACK_COLOR; + } +} +#endif + /**************************************************************************** * Name: avr_stack_check * diff --git a/arch/avr/src/common/avr_initialize.c b/arch/avr/src/common/avr_initialize.c index 4a6f62b5e77..9ee142d680d 100644 --- a/arch/avr/src/common/avr_initialize.c +++ b/arch/avr/src/common/avr_initialize.c @@ -86,36 +86,6 @@ volatile uint32_t *g_current_regs; volatile uint8_t *g_current_regs; #endif -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 3 -static inline void up_color_intstack(void) -{ - uint8_t *ptr = g_intstackalloc; - ssize_t size; - - for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~3); - size > 0; - size -= sizeof(uint8_t)) - { - *ptr++ = INTSTACK_COLOR; - } -} -#else -# define up_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -139,10 +109,6 @@ static inline void up_color_intstack(void) void up_initialize(void) { - /* Colorize the interrupt stack */ - - up_color_intstack(); - /* Add any extra memory fragments to the memory manager */ avr_addregion(); diff --git a/arch/avr/src/common/avr_internal.h b/arch/avr/src/common/avr_internal.h index 2430b99b89a..a3d1d25a460 100644 --- a/arch/avr/src/common/avr_internal.h +++ b/arch/avr/src/common/avr_internal.h @@ -176,5 +176,12 @@ void avr_usbuninitialize(void); size_t avr_stack_check(uintptr_t alloc, size_t size); #endif +#if defined(CONFIG_STACK_COLORATION) && \ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void avr_color_intstack(void); +#else +# define avr_color_intstack() +#endif + #endif /* __ASSEMBLY__ */ #endif /* __ARCH_AVR_SRC_COMMON_UP_INTERNAL_H */ diff --git a/arch/ceva/src/common/ceva_checkstack.c b/arch/ceva/src/common/ceva_checkstack.c index cb92fe182cf..2246241f186 100644 --- a/arch/ceva/src/common/ceva_checkstack.c +++ b/arch/ceva/src/common/ceva_checkstack.c @@ -44,6 +44,30 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: ceva_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void ceva_color_intstack(void) +{ + uint32_t *ptr = (uint32_t *)g_intstackalloc; + ssize_t size; + + for (size = g_intstackbase - g_intstackalloc; + size > 0; + size -= sizeof(uint32_t)) + { + *ptr++ = STACK_COLOR; + } +} +#endif + /**************************************************************************** * Name: ceva_stack_check * diff --git a/arch/ceva/src/common/ceva_initialize.c b/arch/ceva/src/common/ceva_initialize.c index 183f4f8d9da..1efecc6e918 100644 --- a/arch/ceva/src/common/ceva_initialize.c +++ b/arch/ceva/src/common/ceva_initialize.c @@ -28,32 +28,6 @@ #include "ceva_internal.h" -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -static inline void up_color_intstack(void) -{ - uint32_t *ptr = (uint32_t *)g_intstackalloc; - ssize_t size; - - for (size = g_intstackbase - g_intstackalloc; - size > 0; - size -= sizeof(uint32_t)) - { - *ptr++ = INTSTACK_COLOR; - } -} - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -77,10 +51,6 @@ static inline void up_color_intstack(void) void up_initialize(void) { - /* Colorize the interrupt stack */ - - up_color_intstack(); - /* Add any extra memory fragments to the memory manager */ ceva_addregion(); diff --git a/arch/ceva/src/common/ceva_internal.h b/arch/ceva/src/common/ceva_internal.h index dbe86a11638..e4737a59046 100644 --- a/arch/ceva/src/common/ceva_internal.h +++ b/arch/ceva/src/common/ceva_internal.h @@ -307,6 +307,13 @@ size_t ceva_stack_check(uintptr_t alloc, size_t size); void ceva_stack_color(void *stackbase, size_t nbytes); #endif +#if defined(CONFIG_STACK_COLORATION) && \ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void ceva_color_intstack(void); +#else +# define ceva_color_intstack() +#endif + #undef EXTERN #ifdef __cplusplus } diff --git a/arch/ceva/src/xc5/xc5_intc.c b/arch/ceva/src/xc5/xc5_intc.c index b6ff2e4ad43..bc431f186db 100644 --- a/arch/ceva/src/xc5/xc5_intc.c +++ b/arch/ceva/src/xc5/xc5_intc.c @@ -199,5 +199,6 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + ceva_color_intstack(); up_irq_enable(); } diff --git a/arch/ceva/src/xm6/xm6_intc.c b/arch/ceva/src/xm6/xm6_intc.c index 1e5dc25860a..25b48322615 100644 --- a/arch/ceva/src/xm6/xm6_intc.c +++ b/arch/ceva/src/xm6/xm6_intc.c @@ -215,5 +215,6 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + ceva_color_intstack(); up_irq_enable(); } diff --git a/arch/or1k/src/common/or1k_checkstack.c b/arch/or1k/src/common/or1k_checkstack.c index 1eebdf0e56b..3dca5bc2035 100644 --- a/arch/or1k/src/common/or1k_checkstack.c +++ b/arch/or1k/src/common/or1k_checkstack.c @@ -52,6 +52,30 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: or1k_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void or1k_color_intstack(void) +{ + uint32_t *ptr = (uint32_t *)g_intstackalloc; + ssize_t size; + + for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~3); + size > 0; + size -= sizeof(uint32_t)) + { + *ptr++ = STACK_COLOR; + } +} +#endif + /**************************************************************************** * Name: or1k_stack_check * diff --git a/arch/or1k/src/common/or1k_initialize.c b/arch/or1k/src/common/or1k_initialize.c index 43b9b2b3398..b62cd7b1ab6 100644 --- a/arch/or1k/src/common/or1k_initialize.c +++ b/arch/or1k/src/common/or1k_initialize.c @@ -106,32 +106,6 @@ void up_enable_dcache(void) } #endif -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 3 -static inline void up_color_intstack(void) -{ - uint32_t *ptr = (uint32_t *)g_intstackalloc; - ssize_t size; - - for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~3); - size > 0; - size -= sizeof(uint32_t)) - { - *ptr++ = INTSTACK_COLOR; - } -} -#else -# define up_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -155,10 +129,6 @@ static inline void up_color_intstack(void) void up_initialize(void) { - /* Colorize the interrupt stack */ - - up_color_intstack(); - /* Add any extra memory fragments to the memory manager */ or1k_addregion(); diff --git a/arch/or1k/src/common/or1k_internal.h b/arch/or1k/src/common/or1k_internal.h index 0ba986e9b74..4d52245cb6d 100644 --- a/arch/or1k/src/common/or1k_internal.h +++ b/arch/or1k/src/common/or1k_internal.h @@ -325,6 +325,13 @@ size_t or1k_stack_check(uintptr_t alloc, size_t size); void or1k_stack_color(void *stackbase, size_t nbytes); #endif +#if defined(CONFIG_STACK_COLORATION) && \ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 3 +void or1k_color_intstack(void); +#else +# define or1k_color_intstack() +#endif + #undef EXTERN #ifdef __cplusplus } diff --git a/arch/or1k/src/mor1kx/or1k_irq.c b/arch/or1k/src/mor1kx/or1k_irq.c index dd68a541578..2d8fa1e8db5 100644 --- a/arch/or1k/src/mor1kx/or1k_irq.c +++ b/arch/or1k/src/mor1kx/or1k_irq.c @@ -53,6 +53,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + or1k_color_intstack(); up_irq_enable(); } diff --git a/arch/risc-v/src/bl602/bl602_irq.c b/arch/risc-v/src/bl602/bl602_irq.c index 6dc3c1e461f..d518ffd8b44 100644 --- a/arch/risc-v/src/bl602/bl602_irq.c +++ b/arch/risc-v/src/bl602/bl602_irq.c @@ -92,6 +92,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/bl808/bl808_irq.c b/arch/risc-v/src/bl808/bl808_irq.c index 2d9a775548f..9a042cb1c9a 100644 --- a/arch/risc-v/src/bl808/bl808_irq.c +++ b/arch/risc-v/src/bl808/bl808_irq.c @@ -187,6 +187,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/c906/c906_irq.c b/arch/risc-v/src/c906/c906_irq.c index cbd16765198..0fdc4f21da9 100644 --- a/arch/risc-v/src/c906/c906_irq.c +++ b/arch/risc-v/src/c906/c906_irq.c @@ -93,6 +93,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/common/espressif/esp_irq.c b/arch/risc-v/src/common/espressif/esp_irq.c index 19b54044b8a..e8d47096265 100644 --- a/arch/risc-v/src/common/espressif/esp_irq.c +++ b/arch/risc-v/src/common/espressif/esp_irq.c @@ -374,6 +374,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/common/riscv_checkstack.c b/arch/risc-v/src/common/riscv_checkstack.c index 460a28fbf06..68dc1a26417 100644 --- a/arch/risc-v/src/common/riscv_checkstack.c +++ b/arch/risc-v/src/common/riscv_checkstack.c @@ -48,6 +48,30 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: riscv_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 15 +void riscv_color_intstack(void) +{ + uint32_t *ptr = (uint32_t *)g_intstackalloc; + ssize_t size; + + for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~15); + size > 0; + size -= sizeof(uint32_t)) + { + *ptr++ = STACK_COLOR; + } +} +#endif + /**************************************************************************** * Name: riscv_stack_check * diff --git a/arch/risc-v/src/common/riscv_initialize.c b/arch/risc-v/src/common/riscv_initialize.c index 7faf2726ab9..355fa47bdec 100644 --- a/arch/risc-v/src/common/riscv_initialize.c +++ b/arch/risc-v/src/common/riscv_initialize.c @@ -38,36 +38,6 @@ volatile bool g_interrupt_context[CONFIG_SMP_NCPUS]; -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 15 -static inline void up_color_intstack(void) -{ - uint32_t *ptr = (uint32_t *)g_intstackalloc; - ssize_t size; - - for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~15); - size > 0; - size -= sizeof(uint32_t)) - { - *ptr++ = INTSTACK_COLOR; - } -} -#else -# define up_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -91,10 +61,6 @@ static inline void up_color_intstack(void) void up_initialize(void) { - /* Colorize the interrupt stack */ - - up_color_intstack(); - /* Add any extra memory fragments to the memory manager */ riscv_addregion(); diff --git a/arch/risc-v/src/common/riscv_internal.h b/arch/risc-v/src/common/riscv_internal.h index 5487787b6bc..073d67e4fde 100644 --- a/arch/risc-v/src/common/riscv_internal.h +++ b/arch/risc-v/src/common/riscv_internal.h @@ -364,6 +364,13 @@ size_t riscv_stack_check(uintptr_t alloc, size_t size); void riscv_stack_color(void *stackbase, size_t nbytes); #endif +#if defined(CONFIG_STACK_COLORATION) && \ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 15 +void riscv_color_intstack(void); +#else +# define riscv_color_intstack() +#endif + #ifdef CONFIG_SMP void riscv_cpu_boot(int cpu); int riscv_smp_call_handler(int irq, void *c, void *arg); diff --git a/arch/risc-v/src/esp32c3-legacy/esp32c3_irq.c b/arch/risc-v/src/esp32c3-legacy/esp32c3_irq.c index c8845718656..51edaf57606 100644 --- a/arch/risc-v/src/esp32c3-legacy/esp32c3_irq.c +++ b/arch/risc-v/src/esp32c3-legacy/esp32c3_irq.c @@ -245,6 +245,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/fe310/fe310_irq.c b/arch/risc-v/src/fe310/fe310_irq.c index 9b0cae7a37e..f87b7f4db9f 100644 --- a/arch/risc-v/src/fe310/fe310_irq.c +++ b/arch/risc-v/src/fe310/fe310_irq.c @@ -86,6 +86,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/hpm6000/hpm_irq.c b/arch/risc-v/src/hpm6000/hpm_irq.c index 641e11548d0..50acd2d6b64 100644 --- a/arch/risc-v/src/hpm6000/hpm_irq.c +++ b/arch/risc-v/src/hpm6000/hpm_irq.c @@ -90,6 +90,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/hpm6750/hpm6750_irq.c b/arch/risc-v/src/hpm6750/hpm6750_irq.c index 4fa70fa915f..146a116f7d8 100644 --- a/arch/risc-v/src/hpm6750/hpm6750_irq.c +++ b/arch/risc-v/src/hpm6750/hpm6750_irq.c @@ -90,6 +90,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/jh7110/jh7110_irq.c b/arch/risc-v/src/jh7110/jh7110_irq.c index fb15d4e6171..c3ff78d4c49 100644 --- a/arch/risc-v/src/jh7110/jh7110_irq.c +++ b/arch/risc-v/src/jh7110/jh7110_irq.c @@ -93,6 +93,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/k210/k210_irq.c b/arch/risc-v/src/k210/k210_irq.c index 6ca3924d531..a2a4915db88 100644 --- a/arch/risc-v/src/k210/k210_irq.c +++ b/arch/risc-v/src/k210/k210_irq.c @@ -99,6 +99,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/k230/k230_irq.c b/arch/risc-v/src/k230/k230_irq.c index 2e6e10684a2..90396c59e1b 100644 --- a/arch/risc-v/src/k230/k230_irq.c +++ b/arch/risc-v/src/k230/k230_irq.c @@ -105,6 +105,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/litex/litex_irq.c b/arch/risc-v/src/litex/litex_irq.c index 2d011d46a2e..61d0d8b0a1e 100644 --- a/arch/risc-v/src/litex/litex_irq.c +++ b/arch/risc-v/src/litex/litex_irq.c @@ -93,6 +93,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/mpfs/mpfs_irq.c b/arch/risc-v/src/mpfs/mpfs_irq.c index 01111cef9a4..99e43868589 100644 --- a/arch/risc-v/src/mpfs/mpfs_irq.c +++ b/arch/risc-v/src/mpfs/mpfs_irq.c @@ -88,6 +88,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/qemu-rv/qemu_rv_irq.c b/arch/risc-v/src/qemu-rv/qemu_rv_irq.c index a7df68de928..bc3f3d0789c 100644 --- a/arch/risc-v/src/qemu-rv/qemu_rv_irq.c +++ b/arch/risc-v/src/qemu-rv/qemu_rv_irq.c @@ -154,6 +154,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/rv32m1/rv32m1_irq.c b/arch/risc-v/src/rv32m1/rv32m1_irq.c index e0eca5741f6..d30f1a42521 100644 --- a/arch/risc-v/src/rv32m1/rv32m1_irq.c +++ b/arch/risc-v/src/rv32m1/rv32m1_irq.c @@ -118,6 +118,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/risc-v/src/sg2000/sg2000_irq.c b/arch/risc-v/src/sg2000/sg2000_irq.c index 325ade74e94..bb9ea7b9052 100644 --- a/arch/risc-v/src/sg2000/sg2000_irq.c +++ b/arch/risc-v/src/sg2000/sg2000_irq.c @@ -100,6 +100,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ + riscv_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/sparc/src/bm3803/bm3803-irq.c b/arch/sparc/src/bm3803/bm3803-irq.c index dd740ee0fc6..ead37a3b449 100644 --- a/arch/sparc/src/bm3803/bm3803-irq.c +++ b/arch/sparc/src/bm3803/bm3803-irq.c @@ -93,6 +93,7 @@ void up_irqinitialize(void) * register */ + sparc_color_intstack(); up_irq_enable(); } diff --git a/arch/sparc/src/bm3823/bm3823-irq.c b/arch/sparc/src/bm3823/bm3823-irq.c index c064724c566..e8997fd9e90 100644 --- a/arch/sparc/src/bm3823/bm3823-irq.c +++ b/arch/sparc/src/bm3823/bm3823-irq.c @@ -98,6 +98,7 @@ void up_irqinitialize(void) * register */ + sparc_color_intstack(); up_irq_enable(); } diff --git a/arch/sparc/src/common/sparc_checkstack.c b/arch/sparc/src/common/sparc_checkstack.c index 47f0191a58f..c989f2c0f05 100644 --- a/arch/sparc/src/common/sparc_checkstack.c +++ b/arch/sparc/src/common/sparc_checkstack.c @@ -49,6 +49,27 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: sparc_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 7 +void sparc_color_intstack(void) +{ + int cpu; + + for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) + { + sparc_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); + } +} +#endif + /**************************************************************************** * Name: sparc_stack_check * diff --git a/arch/sparc/src/common/sparc_initialize.c b/arch/sparc/src/common/sparc_initialize.c index 57e5e120e1a..f18d15bed96 100644 --- a/arch/sparc/src/common/sparc_initialize.c +++ b/arch/sparc/src/common/sparc_initialize.c @@ -89,33 +89,6 @@ volatile uint32_t *g_current_regs[CONFIG_SMP_NCPUS]; -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 7 -static inline void up_color_intstack(void) -{ - int cpu; - - for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) - { - sparc_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); - } -} -#else -# define up_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -139,10 +112,6 @@ static inline void up_color_intstack(void) void up_initialize(void) { - /* Colorize the interrupt stack */ - - up_color_intstack(); - /* Add any extra memory fragments to the memory manager */ sparc_addregion(); diff --git a/arch/sparc/src/common/sparc_internal.h b/arch/sparc/src/common/sparc_internal.h index 191fe418c3d..5600350f304 100644 --- a/arch/sparc/src/common/sparc_internal.h +++ b/arch/sparc/src/common/sparc_internal.h @@ -250,5 +250,12 @@ size_t sparc_stack_check(void *stackbase, size_t nbytes); void sparc_stack_color(void *stackbase, size_t nbytes); #endif +#if defined(CONFIG_STACK_COLORATION) && \ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 7 +void sparc_color_intstack(void); +#else +# define sparc_color_intstack() +#endif + #endif /* __ASSEMBLY__ */ #endif /* __ARCH_SPARC_SRC_COMMON_UP_INTERNAL_H */ diff --git a/arch/sparc/src/s698pm/s698pm-irq.c b/arch/sparc/src/s698pm/s698pm-irq.c index c58ef08d743..0f99d77e3b1 100644 --- a/arch/sparc/src/s698pm/s698pm-irq.c +++ b/arch/sparc/src/s698pm/s698pm-irq.c @@ -145,6 +145,7 @@ void up_irqinitialize(void) /* And finally, enable cpu interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + sparc_color_intstack(); up_irq_enable(); #endif } diff --git a/arch/tricore/src/common/tricore_initialize.c b/arch/tricore/src/common/tricore_initialize.c index fe97be2472c..9fa6ac84468 100644 --- a/arch/tricore/src/common/tricore_initialize.c +++ b/arch/tricore/src/common/tricore_initialize.c @@ -36,36 +36,6 @@ volatile uintptr_t *g_current_regs[CONFIG_SMP_NCPUS]; -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: up_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 15 -static inline void up_color_intstack(void) -{ - uint32_t *ptr = (uint32_t *)g_intstackalloc; - ssize_t size; - - for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~15); - size > 0; - size -= sizeof(uint32_t)) - { - *ptr++ = INTSTACK_COLOR; - } -} -#else -# define up_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -89,10 +59,6 @@ static inline void up_color_intstack(void) void up_initialize(void) { - /* Colorize the interrupt stack */ - - up_color_intstack(); - /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER diff --git a/arch/tricore/src/common/tricore_irq.c b/arch/tricore/src/common/tricore_irq.c index d1fec885686..6329f182873 100644 --- a/arch/tricore/src/common/tricore_irq.c +++ b/arch/tricore/src/common/tricore_irq.c @@ -38,6 +38,36 @@ #include "IfxSrc.h" #include "IfxCpu.h" +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: tricore_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 15 +static inline void tricore_color_intstack(void) +{ + uint32_t *ptr = (uint32_t *)g_intstackalloc; + ssize_t size; + + for (size = (CONFIG_ARCH_INTERRUPTSTACK & ~15); + size > 0; + size -= sizeof(uint32_t)) + { + *ptr++ = INTSTACK_COLOR; + } +} +#else +# define tricore_color_intstack() +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -61,6 +91,7 @@ void up_irq_enable(void) void up_irqinitialize(void) { + tricore_color_intstack(); up_irq_enable(); } diff --git a/arch/x86_64/src/intel64/intel64_irq.c b/arch/x86_64/src/intel64/intel64_irq.c index c1dced6723d..4934113278d 100644 --- a/arch/x86_64/src/intel64/intel64_irq.c +++ b/arch/x86_64/src/intel64/intel64_irq.c @@ -433,7 +433,7 @@ static inline void up_idtinit(void) } /**************************************************************************** - * Name: arm_color_intstack + * Name: x86_64_color_intstack * * Description: * Set the interrupt stack to a value so that later we can determine how @@ -504,10 +504,6 @@ void up_irqinitialize(void) x86_64_cpu_tss_init(cpu); - /* Colorize the interrupt stack */ - - x86_64_color_intstack(); - /* Initialize the APIC */ up_apic_init(); @@ -536,6 +532,7 @@ void up_irqinitialize(void) /* And finally, enable interrupts */ #ifndef CONFIG_SUPPRESS_INTERRUPTS + x86_64_color_intstack(); up_irq_restore(X86_64_RFLAGS_IF); #endif diff --git a/arch/xtensa/src/common/xtensa.h b/arch/xtensa/src/common/xtensa.h index 2a4c1eb95bf..bf5515d1acd 100644 --- a/arch/xtensa/src/common/xtensa.h +++ b/arch/xtensa/src/common/xtensa.h @@ -334,5 +334,12 @@ size_t xtensa_stack_check(uintptr_t alloc, size_t size); void xtensa_stack_color(void *stackbase, size_t nbytes); #endif +#if defined(CONFIG_STACK_COLORATION) && \ + defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 15 +void xtensa_color_intstack(void); +#else +# define xtensa_color_intstack() +#endif + #endif /* __ASSEMBLY__ */ #endif /* __ARCH_XTENSA_SRC_COMMON_XTENSA_H */ diff --git a/arch/xtensa/src/common/xtensa_checkstack.c b/arch/xtensa/src/common/xtensa_checkstack.c index 51504e7115b..2aad524b2b9 100644 --- a/arch/xtensa/src/common/xtensa_checkstack.c +++ b/arch/xtensa/src/common/xtensa_checkstack.c @@ -48,6 +48,27 @@ * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: xtensa_color_intstack + * + * Description: + * Set the interrupt stack to a value so that later we can determine how + * much stack space was used by interrupt handling logic + * + ****************************************************************************/ + +#if defined(CONFIG_ARCH_INTERRUPTSTACK) && CONFIG_ARCH_INTERRUPTSTACK > 15 +void xtensa_color_intstack(void) +{ + int cpu; + + for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) + { + xtensa_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); + } +} +#endif + /**************************************************************************** * Name: xtensa_stack_check * diff --git a/arch/xtensa/src/common/xtensa_initialize.c b/arch/xtensa/src/common/xtensa_initialize.c index 80bb37fe55a..e354dae7ed8 100644 --- a/arch/xtensa/src/common/xtensa_initialize.c +++ b/arch/xtensa/src/common/xtensa_initialize.c @@ -38,33 +38,6 @@ volatile bool g_interrupt_context[CONFIG_SMP_NCPUS]; -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: xtensa_color_intstack - * - * Description: - * Set the interrupt stack to a value so that later we can determine how - * much stack space was used by interrupt handling logic - * - ****************************************************************************/ - -#if defined(CONFIG_STACK_COLORATION) && CONFIG_ARCH_INTERRUPTSTACK > 15 -static inline void xtensa_color_intstack(void) -{ - int cpu; - - for (cpu = 0; cpu < CONFIG_SMP_NCPUS; cpu++) - { - xtensa_stack_color((void *)up_get_intstackbase(cpu), INTSTACK_SIZE); - } -} -#else -# define xtensa_color_intstack() -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -92,8 +65,6 @@ void up_initialize(void) xtensa_set_cpenable(CONFIG_XTENSA_CP_INITSET); #endif - xtensa_color_intstack(); - /* Add any extra memory fragments to the memory manager */ xtensa_add_region(); diff --git a/arch/xtensa/src/esp32/esp32_irq.c b/arch/xtensa/src/esp32/esp32_irq.c index 261bb2b64ad..ec80d2c0bc4 100644 --- a/arch/xtensa/src/esp32/esp32_irq.c +++ b/arch/xtensa/src/esp32/esp32_irq.c @@ -573,6 +573,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts. Also clears PS.EXCM */ + xtensa_color_intstack(); up_irq_enable(); #endif diff --git a/arch/xtensa/src/esp32s2/esp32s2_irq.c b/arch/xtensa/src/esp32s2/esp32s2_irq.c index dda4cb05c18..25066460a92 100644 --- a/arch/xtensa/src/esp32s2/esp32s2_irq.c +++ b/arch/xtensa/src/esp32s2/esp32s2_irq.c @@ -325,6 +325,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts. Also clears PS.EXCM */ + xtensa_color_intstack(); up_irq_enable(); #endif diff --git a/arch/xtensa/src/esp32s3/esp32s3_irq.c b/arch/xtensa/src/esp32s3/esp32s3_irq.c index a5c00285e16..44f3065d200 100644 --- a/arch/xtensa/src/esp32s3/esp32s3_irq.c +++ b/arch/xtensa/src/esp32s3/esp32s3_irq.c @@ -523,6 +523,7 @@ void up_irqinitialize(void) #ifndef CONFIG_SUPPRESS_INTERRUPTS /* And finally, enable interrupts. Also clears PS.EXCM */ + xtensa_color_intstack(); up_irq_enable(); #endif