mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Add 2 per-task monitors as part of the sched model: * nrp: need-resched preempts Monitor to ensure preemption requires need resched. * sssw: set state sleep and wakeup Monitor to ensure sched_set_state to sleepable leads to sleeping and sleeping tasks require wakeup. Cc: Ingo Molnar <mingo@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Tomas Glozar <tglozar@redhat.com> Cc: Juri Lelli <jlelli@redhat.com> Cc: Clark Williams <williams@redhat.com> Cc: John Kacur <jkacur@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/20250728135022.255578-9-gmonaco@redhat.com Signed-off-by: Gabriele Monaco <gmonaco@redhat.com> Acked-by: Nam Cao <namcao@linutronix.de> Tested-by: Nam Cao <namcao@linutronix.de> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
29 lines
1.4 KiB
Text
29 lines
1.4 KiB
Text
digraph state_automaton {
|
|
center = true;
|
|
size = "7,11";
|
|
{node [shape = doublecircle] "any_thread_running"};
|
|
{node [shape = circle] "any_thread_running"};
|
|
{node [shape = circle] "nested_preempt"};
|
|
{node [shape = plaintext, style=invis, label=""] "__init_preempt_irq"};
|
|
{node [shape = circle] "preempt_irq"};
|
|
{node [shape = circle] "rescheduling"};
|
|
"__init_preempt_irq" -> "preempt_irq";
|
|
"any_thread_running" [label = "any_thread_running", color = green3];
|
|
"any_thread_running" -> "any_thread_running" [ label = "schedule_entry\nirq_entry" ];
|
|
"any_thread_running" -> "rescheduling" [ label = "sched_need_resched" ];
|
|
"nested_preempt" [label = "nested_preempt"];
|
|
"nested_preempt" -> "any_thread_running" [ label = "schedule_entry_preempt\nschedule_entry" ];
|
|
"nested_preempt" -> "nested_preempt" [ label = "irq_entry" ];
|
|
"nested_preempt" -> "preempt_irq" [ label = "sched_need_resched" ];
|
|
"preempt_irq" [label = "preempt_irq"];
|
|
"preempt_irq" -> "nested_preempt" [ label = "schedule_entry_preempt\nschedule_entry" ];
|
|
"preempt_irq" -> "preempt_irq" [ label = "irq_entry\nsched_need_resched" ];
|
|
"rescheduling" [label = "rescheduling"];
|
|
"rescheduling" -> "any_thread_running" [ label = "schedule_entry_preempt\nschedule_entry" ];
|
|
"rescheduling" -> "preempt_irq" [ label = "irq_entry" ];
|
|
"rescheduling" -> "rescheduling" [ label = "sched_need_resched" ];
|
|
{ rank = min ;
|
|
"__init_preempt_irq";
|
|
"preempt_irq";
|
|
}
|
|
}
|