mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-14 06:22:34 +02:00
Add a sample monitor to showcase hybrid/timed automata. The stall monitor identifies tasks stalled for longer than a threshold and reacts when that happens. Reviewed-by: Nam Cao <namcao@linutronix.de> Link: https://lore.kernel.org/r/20260330111010.153663-7-gmonaco@redhat.com Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
82 lines
1.5 KiB
C
82 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Automatically generated C representation of stall automaton
|
|
* For further information about this format, see kernel documentation:
|
|
* Documentation/trace/rv/deterministic_automata.rst
|
|
*/
|
|
|
|
#define MONITOR_NAME stall
|
|
|
|
enum states_stall {
|
|
dequeued_stall,
|
|
enqueued_stall,
|
|
running_stall,
|
|
state_max_stall,
|
|
};
|
|
|
|
#define INVALID_STATE state_max_stall
|
|
|
|
enum events_stall {
|
|
sched_switch_in_stall,
|
|
sched_switch_preempt_stall,
|
|
sched_switch_wait_stall,
|
|
sched_wakeup_stall,
|
|
event_max_stall,
|
|
};
|
|
|
|
enum envs_stall {
|
|
clk_stall,
|
|
env_max_stall,
|
|
env_max_stored_stall = env_max_stall,
|
|
};
|
|
|
|
_Static_assert(env_max_stored_stall <= MAX_HA_ENV_LEN, "Not enough slots");
|
|
|
|
struct automaton_stall {
|
|
char *state_names[state_max_stall];
|
|
char *event_names[event_max_stall];
|
|
char *env_names[env_max_stall];
|
|
unsigned char function[state_max_stall][event_max_stall];
|
|
unsigned char initial_state;
|
|
bool final_states[state_max_stall];
|
|
};
|
|
|
|
static const struct automaton_stall automaton_stall = {
|
|
.state_names = {
|
|
"dequeued",
|
|
"enqueued",
|
|
"running",
|
|
},
|
|
.event_names = {
|
|
"sched_switch_in",
|
|
"sched_switch_preempt",
|
|
"sched_switch_wait",
|
|
"sched_wakeup",
|
|
},
|
|
.env_names = {
|
|
"clk",
|
|
},
|
|
.function = {
|
|
{
|
|
INVALID_STATE,
|
|
INVALID_STATE,
|
|
INVALID_STATE,
|
|
enqueued_stall,
|
|
},
|
|
{
|
|
running_stall,
|
|
INVALID_STATE,
|
|
INVALID_STATE,
|
|
enqueued_stall,
|
|
},
|
|
{
|
|
running_stall,
|
|
enqueued_stall,
|
|
dequeued_stall,
|
|
running_stall,
|
|
},
|
|
},
|
|
.initial_state = dequeued_stall,
|
|
.final_states = { 1, 0, 0 },
|
|
};
|