This is an automated email from the ASF dual-hosted git repository.
davids5 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 13a7ae3d06 arch: Call board_reset before up_irq_save and spin_trylock
13a7ae3d06 is described below
commit 13a7ae3d06cbd84962da52f3240fbfdac5fd8dd3
Author: Xiang Xiao <[email protected]>
AuthorDate: Wed Jul 27 03:08:14 2022 +0800
arch: Call board_reset before up_irq_save and spin_trylock
since board_reset may call some kernel functions which try
to acquire the lock again
Signed-off-by: Xiang Xiao <[email protected]>
---
arch/arm/src/common/arm_assert.c | 15 ++++++++-------
arch/arm64/src/common/arm64_assert.c | 18 ++++++++++++++----
arch/avr/src/common/up_assert.c | 7 ++++---
arch/ceva/src/common/up_assert.c | 17 +++++++++--------
arch/hc/src/m9s12/m9s12_assert.c | 7 ++++---
arch/mips/src/mips32/mips_assert.c | 7 ++++---
arch/misoc/src/lm32/lm32_assert.c | 7 ++++---
arch/misoc/src/minerva/minerva_assert.c | 7 ++++---
arch/or1k/src/common/up_assert.c | 7 ++++---
arch/renesas/src/common/up_assert.c | 8 +++++---
arch/risc-v/src/common/riscv_assert.c | 17 +++++++++--------
arch/sparc/src/common/up_assert.c | 7 ++++---
arch/x86/src/common/up_assert.c | 7 ++++---
arch/x86_64/src/common/up_assert.c | 7 ++++---
arch/xtensa/src/common/xtensa_assert.c | 7 ++++---
arch/z16/src/common/z16_assert.c | 7 ++++---
arch/z80/src/common/z80_assert.c | 7 ++++---
17 files changed, 93 insertions(+), 66 deletions(-)
diff --git a/arch/arm/src/common/arm_assert.c b/arch/arm/src/common/arm_assert.c
index 6f5059fe1a..8380a8a0f2 100644
--- a/arch/arm/src/common/arm_assert.c
+++ b/arch/arm/src/common/arm_assert.c
@@ -467,21 +467,22 @@ static void arm_assert(void)
if (CURRENT_REGS || (running_task())->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
/* Disable interrupts on this CPU */
up_irq_save();
- for (; ; )
- {
#ifdef CONFIG_SMP
- /* Try (again) to stop activity on other CPUs */
+ /* Try (again) to stop activity on other CPUs */
- spin_trylock(&g_cpu_irqlock);
+ spin_trylock(&g_cpu_irqlock);
#endif
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
+ for (; ; )
+ {
#ifdef CONFIG_ARCH_LEDS
/* FLASH LEDs a 2Hz */
diff --git a/arch/arm64/src/common/arm64_assert.c
b/arch/arm64/src/common/arm64_assert.c
index 186240be20..7544357c9c 100644
--- a/arch/arm64/src/common/arm64_assert.c
+++ b/arch/arm64/src/common/arm64_assert.c
@@ -514,21 +514,31 @@ static void arm64_assert(void)
if (CURRENT_REGS || (running_task())->flink == NULL)
{
+ #if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
/* Disable interrupts on this CPU */
up_irq_save();
- for (; ; )
- {
#ifdef CONFIG_SMP
- /* Try (again) to stop activity on other CPUs */
+ /* Try (again) to stop activity on other CPUs */
- spin_trylock(&g_cpu_irqlock);
+ spin_trylock(&g_cpu_irqlock);
#endif
+ for (; ; )
+ {
up_mdelay(250);
}
}
+ else
+ {
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+ }
}
/****************************************************************************
diff --git a/arch/avr/src/common/up_assert.c b/arch/avr/src/common/up_assert.c
index 2af547cca1..b51b14ab9c 100644
--- a/arch/avr/src/common/up_assert.c
+++ b/arch/avr/src/common/up_assert.c
@@ -72,12 +72,13 @@ static void _up_assert(void)
if (g_current_regs || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/ceva/src/common/up_assert.c b/arch/ceva/src/common/up_assert.c
index a587fe9279..d95b82a718 100644
--- a/arch/ceva/src/common/up_assert.c
+++ b/arch/ceva/src/common/up_assert.c
@@ -298,18 +298,20 @@ static void _up_assert(int errorcode)
if (up_interrupt_context() || sched_idletask())
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
- for (; ; )
- {
+
#ifdef CONFIG_SMP
- /* Try (again) to stop activity on other CPUs */
+ /* Try (again) to stop activity on other CPUs */
- spin_trylock(&g_cpu_irqlock);
+ spin_trylock(&g_cpu_irqlock);
#endif
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
+ for (; ; )
+ {
}
}
else
@@ -317,7 +319,6 @@ static void _up_assert(int errorcode)
#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
#endif
- exit(errorcode);
}
}
diff --git a/arch/hc/src/m9s12/m9s12_assert.c b/arch/hc/src/m9s12/m9s12_assert.c
index 0dd13ab3ea..05779fc28a 100644
--- a/arch/hc/src/m9s12/m9s12_assert.c
+++ b/arch/hc/src/m9s12/m9s12_assert.c
@@ -268,12 +268,13 @@ static void _up_assert(void)
if (g_current_regs || (running_task())->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/mips/src/mips32/mips_assert.c
b/arch/mips/src/mips32/mips_assert.c
index 5469bc18f6..964d0d9c45 100644
--- a/arch/mips/src/mips32/mips_assert.c
+++ b/arch/mips/src/mips32/mips_assert.c
@@ -72,12 +72,13 @@ static void _up_assert(void)
if (CURRENT_REGS || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/misoc/src/lm32/lm32_assert.c
b/arch/misoc/src/lm32/lm32_assert.c
index f0e8c6c279..1f6035078e 100644
--- a/arch/misoc/src/lm32/lm32_assert.c
+++ b/arch/misoc/src/lm32/lm32_assert.c
@@ -77,12 +77,13 @@ static void _up_assert(void)
if (g_current_regs || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/misoc/src/minerva/minerva_assert.c
b/arch/misoc/src/minerva/minerva_assert.c
index 3e713305a2..61e520ed93 100644
--- a/arch/misoc/src/minerva/minerva_assert.c
+++ b/arch/misoc/src/minerva/minerva_assert.c
@@ -77,12 +77,13 @@ static void _up_assert(void)
if (g_current_regs || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/or1k/src/common/up_assert.c b/arch/or1k/src/common/up_assert.c
index c7d3865b19..a76e68ce54 100644
--- a/arch/or1k/src/common/up_assert.c
+++ b/arch/or1k/src/common/up_assert.c
@@ -312,12 +312,13 @@ static void _up_assert(void)
if (CURRENT_REGS || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/renesas/src/common/up_assert.c
b/arch/renesas/src/common/up_assert.c
index 1bff3444a5..ee632cbaf6 100644
--- a/arch/renesas/src/common/up_assert.c
+++ b/arch/renesas/src/common/up_assert.c
@@ -74,11 +74,13 @@ static void _up_assert(void)
if (g_current_regs || running_task()->flink == NULL)
{
- for (; ; )
- {
#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
#endif
+
+ up_irq_save();
+ for (; ; )
+ {
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/risc-v/src/common/riscv_assert.c
b/arch/risc-v/src/common/riscv_assert.c
index 488bc88f33..5d1e74b305 100644
--- a/arch/risc-v/src/common/riscv_assert.c
+++ b/arch/risc-v/src/common/riscv_assert.c
@@ -429,18 +429,19 @@ static void riscv_assert(void)
if (CURRENT_REGS || running_task()->flink == NULL)
{
- up_irq_save();
- for (; ; )
- {
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
#ifdef CONFIG_SMP
- /* Try (again) to stop activity on other CPUs */
+ /* Try (again) to stop activity on other CPUs */
- spin_trylock(&g_cpu_irqlock);
+ spin_trylock(&g_cpu_irqlock);
#endif
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
+ up_irq_save();
+ for (; ; )
+ {
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/sparc/src/common/up_assert.c
b/arch/sparc/src/common/up_assert.c
index 9dde88df24..8ecb8ac684 100644
--- a/arch/sparc/src/common/up_assert.c
+++ b/arch/sparc/src/common/up_assert.c
@@ -73,12 +73,13 @@ static void _up_assert(int errorcode)
if (g_current_regs || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/x86/src/common/up_assert.c b/arch/x86/src/common/up_assert.c
index f287d37d05..983165e521 100644
--- a/arch/x86/src/common/up_assert.c
+++ b/arch/x86/src/common/up_assert.c
@@ -234,12 +234,13 @@ static void _up_assert(void)
if (g_current_regs || (running_task())->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/x86_64/src/common/up_assert.c
b/arch/x86_64/src/common/up_assert.c
index 93ec98c24f..834efcf017 100644
--- a/arch/x86_64/src/common/up_assert.c
+++ b/arch/x86_64/src/common/up_assert.c
@@ -221,12 +221,13 @@ static void _up_assert(void)
if (g_current_regs || (running_task())->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/xtensa/src/common/xtensa_assert.c
b/arch/xtensa/src/common/xtensa_assert.c
index b9542b9728..9c46dd50b8 100644
--- a/arch/xtensa/src/common/xtensa_assert.c
+++ b/arch/xtensa/src/common/xtensa_assert.c
@@ -112,14 +112,15 @@ static void xtensa_assert(void)
if (CURRENT_REGS || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
/* Blink the LEDs forever */
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/z16/src/common/z16_assert.c b/arch/z16/src/common/z16_assert.c
index 20864918b1..ffe6081157 100644
--- a/arch/z16/src/common/z16_assert.c
+++ b/arch/z16/src/common/z16_assert.c
@@ -73,12 +73,13 @@ static void _up_assert(void)
if (up_interrupt_context() || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);
diff --git a/arch/z80/src/common/z80_assert.c b/arch/z80/src/common/z80_assert.c
index ff069ab40c..8312e0fb6d 100644
--- a/arch/z80/src/common/z80_assert.c
+++ b/arch/z80/src/common/z80_assert.c
@@ -71,12 +71,13 @@ static void _up_assert(void)
if (up_interrupt_context() || running_task()->flink == NULL)
{
+#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
+ board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
+#endif
+
up_irq_save();
for (; ; )
{
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
- board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
#ifdef CONFIG_ARCH_LEDS
board_autoled_on(LED_PANIC);
up_mdelay(250);