From 5c7166f9ddbd4246432532e6335fcf3191b87fc9 Mon Sep 17 00:00:00 2001 From: ligd Date: Fri, 18 Jun 2021 16:55:46 +0800 Subject: [PATCH] sched: add STACK_USAGE_SAFE_PERCENT for stack overflow check Change-Id: Ia70e243b36401e28c31fcd7e1b480b79374c27ef Signed-off-by: ligd --- Kconfig | 10 ++++++++++ sched/init/nx_start.c | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Kconfig b/Kconfig index 95d0dc51f0b..9120ec6d4ec 100644 --- a/Kconfig +++ b/Kconfig @@ -1758,6 +1758,16 @@ config STACK_COLORATION Only supported by a few architectures. +config STACK_USAGE_SAFE_PERCENT + int "Stack usage safe precent" + default 0 + range 0 100 + depends on STACK_COLORATION + ---help--- + Stack usage precent = up_check_tcbstack() * 100 / tcb->adj_stack_size, + this should lower then STACK_USAGE_SAFE_PERCENT. + Idle thread will timely check stack usage when this marco value > 0. + config STACK_CANARIES bool "Compiler stack canaries" depends on ARCH_HAVE_STACKCHECK diff --git a/sched/init/nx_start.c b/sched/init/nx_start.c index 88529da8ffb..376cbd9471c 100644 --- a/sched/init/nx_start.c +++ b/sched/init/nx_start.c @@ -800,7 +800,7 @@ void nx_start(void) syslog(LOG_INFO, "CPU0: Beginning Idle Loop\n"); for (; ; ) { -#if defined(CONFIG_STACK_COLORATION) && defined(CONFIG_DEBUG_MM) +#if defined(CONFIG_STACK_COLORATION) && CONFIG_STACK_USAGE_SAFE_PERCENT > 0 /* Check stack in idle thread */ @@ -812,7 +812,8 @@ void nx_start(void) flags = enter_critical_section(); tcb = g_pidhash[i].tcb; - if (tcb && up_check_tcbstack_remain(tcb) <= 0) + if (tcb && (up_check_tcbstack(tcb) * 100 / tcb->adj_stack_size + > CONFIG_STACK_USAGE_SAFE_PERCENT)) { _alert("Stack check failed, pid %d, name %s\n", tcb->pid, tcb->name);