sched: add CRITMONITOR time out panic

Signed-off-by: yinshengkai <yinshengkai@xiaomi.com>
This commit is contained in:
yinshengkai
2023-04-07 18:52:57 +08:00
committed by Xiang Xiao
parent 395fa73870
commit 9dabcf9ad2
6 changed files with 40 additions and 12 deletions
+14
View File
@@ -863,6 +863,20 @@ config SCHED_CRITMONITOR_MAXTIME_WDOG
endif # SCHED_CRITMONITOR
config SCHED_CRITMONITOR_MAXTIME_PANIC
bool "Monitor timeout panic"
depends on \
SCHED_CRITMONITOR_MAXTIME_THREAD > 0 || \
SCHED_CRITMONITOR_MAXTIME_WDOG > 0 || \
SCHED_CRITMONITOR_MAXTIME_WQUEUE > 0 || \
SCHED_CRITMONITOR_MAXTIME_PREEMPTION > 0 || \
SCHED_CRITMONITOR_MAXTIME_CSECTION > 0 || \
SCHED_CRITMONITOR_MAXTIME_IRQ > 0
default n
---help---
If this option is enabled, a panic will be triggered when
IRQ/WQUEUE/PREEMPTION execution time exceeds SCHED_CRITMONITOR_MAXTIME_xxx
config SCHED_CPULOAD
bool "Enable CPU load monitoring"
default n
+2 -2
View File
@@ -96,8 +96,8 @@
if (CONFIG_SCHED_CRITMONITOR_MAXTIME_IRQ > 0 && \
elapsed > CONFIG_SCHED_CRITMONITOR_MAXTIME_IRQ) \
{ \
serr("IRQ %d(%p), execute time too long %lu\n", \
irq, vector, elapsed); \
CRITMONITOR_PANIC("IRQ %d(%p), execute time too long %lu\n", \
irq, vector, elapsed); \
} \
} \
while (0)
+12
View File
@@ -91,6 +91,18 @@
# define TLIST_BLOCKED(t) __TLIST_HEAD(t)
#endif
#ifdef CONFIG_SCHED_CRITMONITOR_MAXTIME_PANIC
# define CRITMONITOR_PANIC(fmt, ...) \
do \
{ \
_alert(fmt, ##__VA_ARGS__); \
PANIC(); \
} \
while(0)
#else
# define CRITMONITOR_PANIC(fmt, ...) _alert(fmt, ##__VA_ARGS__)
#endif
/****************************************************************************
* Public Type Definitions
****************************************************************************/
+6 -6
View File
@@ -56,8 +56,8 @@
if (pid > 0 && \
elapsed > CONFIG_SCHED_CRITMONITOR_MAXTIME_PREEMPTION) \
{ \
serr("PID %d hold sched lock too long %"PRIu32"\n", \
pid, elapsed); \
CRITMONITOR_PANIC("PID %d hold sched lock too long %"PRIu32"\n", \
pid, elapsed); \
} \
} \
while (0)
@@ -72,8 +72,8 @@
if (pid > 0 && \
elapsed > CONFIG_SCHED_CRITMONITOR_MAXTIME_CSECTION) \
{ \
serr("PID %d hold critical section too long %"PRIu32"\n", \
pid, elapsed); \
CRITMONITOR_PANIC("PID %d hold critical section too long %" \
PRIu32 "\n", pid, elapsed); \
} \
} \
while (0)
@@ -88,8 +88,8 @@
if (pid > 0 && \
elapsed > CONFIG_SCHED_CRITMONITOR_MAXTIME_THREAD) \
{ \
serr("PID %d execute too long %"PRIu32"\n", \
pid, elapsed); \
CRITMONITOR_PANIC("PID %d execute too long %"PRIu32"\n", \
pid, elapsed); \
} \
} \
while (0)
+3 -2
View File
@@ -59,8 +59,9 @@
elapsed = up_perf_gettime() - start; \
if (elapsed > CONFIG_SCHED_CRITMONITOR_MAXTIME_WDOG) \
{ \
serr("WDOG %p, %s IRQ, execute too long %lu\n", \
func, up_interrupt_context() ? "IN" : "NOT", elapsed); \
CRITMONITOR_PANIC("WDOG %p, %s IRQ, execute too long %lu\n", \
func, up_interrupt_context() ? \
"IN" : "NOT", elapsed); \
} \
} \
while (0)
+3 -2
View File
@@ -38,6 +38,7 @@
#include <nuttx/kthread.h>
#include <nuttx/semaphore.h>
#include "sched/sched.h"
#include "wqueue/wqueue.h"
#if defined(CONFIG_SCHED_WORKQUEUE)
@@ -61,8 +62,8 @@
elapsed = up_perf_gettime() - start; \
if (elapsed > CONFIG_SCHED_CRITMONITOR_MAXTIME_WQUEUE) \
{ \
serr("WORKER %p execute too long %lu\n", \
worker, elapsed); \
CRITMONITOR_PANIC("WORKER %p execute too long %lu\n", \
worker, elapsed); \
} \
} \
while (0)