summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Barnes <robbarnes@google.com>2023-04-20 10:28:28 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-15 19:42:56 +0000
commit42167827fbbc9d0100f151c2980d15a46e61957b (patch)
treee119282c50dec5421f55773cb1729cdf29f53c05
parent7b963a79c884a1584120e5413eae489679a30183 (diff)
downloadchrome-ec-42167827fbbc9d0100f151c2980d15a46e61957b.tar.gz
tasks: Only report stack overflow if task is enabled
Don't report stack overflow on a task that has been disabled. Without this change, system safe mode will fail to recover from a stackoverflow because the stackoverflow will be detected again, even though the task has already been disabled. BUG=b:278792557 TEST=System safe mode starts on boten after a stackoverflow Change-Id: I59ab579c296d108dcd8c5aba9cb32bba6c7bbf54 Signed-off-by: Rob Barnes <robbarnes@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4455298 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Boris Mittelberg <bmbm@google.com>
-rw-r--r--core/cortex-m/task.c3
-rw-r--r--core/cortex-m0/task.c3
-rw-r--r--core/minute-ia/task.c3
-rw-r--r--core/nds32/task.c8
-rw-r--r--core/riscv-rv32i/task.c8
5 files changed, 16 insertions, 9 deletions
diff --git a/core/cortex-m/task.c b/core/cortex-m/task.c
index 336cafc99a..f42b4f9dc0 100644
--- a/core/cortex-m/task.c
+++ b/core/cortex-m/task.c
@@ -301,7 +301,8 @@ void svc_handler(int desched, task_id_t resched)
current = current_task;
#ifdef CONFIG_DEBUG_STACK_OVERFLOW
- if (*current->stack != STACK_UNUSED_VALUE) {
+ if (*current->stack != STACK_UNUSED_VALUE &&
+ task_enabled(current - tasks)) {
panic_printf("\n\nStack overflow in %s task!\n",
task_names[current - tasks]);
software_panic(PANIC_SW_STACK_OVERFLOW, current - tasks);
diff --git a/core/cortex-m0/task.c b/core/cortex-m0/task.c
index f63e9824db..315b8d6d16 100644
--- a/core/cortex-m0/task.c
+++ b/core/cortex-m0/task.c
@@ -231,7 +231,8 @@ task_ __attribute__((noinline)) * __svc_handler(int desched, task_id_t resched)
current = current_task;
#ifdef CONFIG_DEBUG_STACK_OVERFLOW
- if (*current->stack != STACK_UNUSED_VALUE) {
+ if (*current->stack != STACK_UNUSED_VALUE &&
+ task_enabled(current - tasks)) {
panic_printf("\n\nStack overflow in %s task!\n",
task_names[current - tasks]);
software_panic(PANIC_SW_STACK_OVERFLOW, current - tasks);
diff --git a/core/minute-ia/task.c b/core/minute-ia/task.c
index 3e072344df..6322125247 100644
--- a/core/minute-ia/task.c
+++ b/core/minute-ia/task.c
@@ -221,7 +221,8 @@ uint32_t switch_handler(int desched, task_id_t resched)
current = current_task;
if (IS_ENABLED(CONFIG_DEBUG_STACK_OVERFLOW) &&
- *current->stack != STACK_UNUSED_VALUE) {
+ *current->stack != STACK_UNUSED_VALUE &&
+ task_enabled(current - tasks)) {
panic_printf("\n\nStack overflow in %s task!\n",
task_get_name(current - tasks));
diff --git a/core/nds32/task.c b/core/nds32/task.c
index 201c8731fc..bbfc5f79c7 100644
--- a/core/nds32/task.c
+++ b/core/nds32/task.c
@@ -309,9 +309,11 @@ task_ *next_sched_task(void)
#ifdef CONFIG_DEBUG_STACK_OVERFLOW
if (*current_task->stack != STACK_UNUSED_VALUE) {
int i = task_get_current();
-
- panic_printf("\n\nStack overflow in %s task!\n", task_names[i]);
- software_panic(PANIC_SW_STACK_OVERFLOW, i);
+ if (task_enabled(i)) {
+ panic_printf("\n\nStack overflow in %s task!\n",
+ task_names[i]);
+ software_panic(PANIC_SW_STACK_OVERFLOW, i);
+ }
}
#endif
diff --git a/core/riscv-rv32i/task.c b/core/riscv-rv32i/task.c
index 977987277b..48244bc1b2 100644
--- a/core/riscv-rv32i/task.c
+++ b/core/riscv-rv32i/task.c
@@ -289,9 +289,11 @@ task_ *__ram_code next_sched_task(void)
#ifdef CONFIG_DEBUG_STACK_OVERFLOW
if (*current_task->stack != STACK_UNUSED_VALUE) {
int i = task_get_current();
-
- panic_printf("\n\nStack overflow in %s task!\n", task_names[i]);
- software_panic(PANIC_SW_STACK_OVERFLOW, i);
+ if (task_enabled(i)) {
+ panic_printf("\n\nStack overflow in %s task!\n",
+ task_names[i]);
+ software_panic(PANIC_SW_STACK_OVERFLOW, i);
+ }
}
#endif