From: Gabriele Monaco <gmonaco@redhat.com>
To: linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
Jonathan Corbet <corbet@lwn.net>,
Masami Hiramatsu <mhiramat@kernel.org>,
linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org
Cc: Gabriele Monaco <gmonaco@redhat.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Nam Cao <namcao@linutronix.de>, Tomas Glozar <tglozar@redhat.com>,
Juri Lelli <jlelli@redhat.com>,
Clark Williams <williams@redhat.com>,
John Kacur <jkacur@redhat.com>
Subject: [PATCH v3 13/17] rv: Adapt the sco monitor to the new set_state
Date: Tue, 15 Jul 2025 09:14:30 +0200 [thread overview]
Message-ID: <20250715071434.22508-14-gmonaco@redhat.com> (raw)
In-Reply-To: <20250715071434.22508-1-gmonaco@redhat.com>
The sched_set_state tracepoint changed prototype adding a new argument,
this argument can differentiate between an explicit set_state called by
a task and a set state to runnable by the scheduler due to a pending
signal.
Expand the model to handle the new set_state flavour, the monitor was
making sure set state happens only outside of the scheduler, if the
event occurs with the new argument (from_signal) set to true, we instead
expect it to be inside the scheduler.
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
---
Documentation/trace/rv/monitor_sched.rst | 35 +++++++++++++-----------
kernel/trace/rv/monitors/sco/sco.c | 5 +++-
kernel/trace/rv/monitors/sco/sco.h | 4 +++
tools/verification/models/sched/sco.dot | 1 +
4 files changed, 28 insertions(+), 17 deletions(-)
diff --git a/Documentation/trace/rv/monitor_sched.rst b/Documentation/trace/rv/monitor_sched.rst
index 24b2c62a3bc26..6f76bba94d9fb 100644
--- a/Documentation/trace/rv/monitor_sched.rst
+++ b/Documentation/trace/rv/monitor_sched.rst
@@ -64,22 +64,25 @@ Monitor sco
~~~~~~~~~~~
The scheduling context operations (sco) monitor ensures changes in a task state
-happen only in thread context::
-
-
- |
- |
- v
- sched_set_state +------------------+
- +------------------ | |
- | | thread_context |
- +-----------------> | | <+
- +------------------+ |
- | |
- | schedule_entry | schedule_exit
- v |
- |
- scheduling_context -+
+happen only in thread context, the only exception is a special kind of set
+state that occurs if a task about to sleep has a pending signal. This set state
+is not called by the thread but by the scheduler itself::
+
+ |
+ |
+ v
+ sched_set_state +------------------+
+ +---------------------------------- | |
+ | | thread_context |
+ +---------------------------------> | | <+
+ +------------------+ |
+ | |
+ | schedule_entry | schedule_exit
+ v |
+ sched_set_state_runnable_signal |
+ +---------------------------------- |
+ | scheduling_context |
+ +---------------------------------> -+
Monitor snroc
~~~~~~~~~~~~~
diff --git a/kernel/trace/rv/monitors/sco/sco.c b/kernel/trace/rv/monitors/sco/sco.c
index c9206aa12c319..6457ff2469d08 100644
--- a/kernel/trace/rv/monitors/sco/sco.c
+++ b/kernel/trace/rv/monitors/sco/sco.c
@@ -22,7 +22,10 @@ DECLARE_DA_MON_PER_CPU(sco, unsigned char);
static void handle_sched_set_state(void *data, struct task_struct *tsk,
int state, bool from_signal)
{
- da_handle_start_event_sco(sched_set_state_sco);
+ if (from_signal)
+ da_handle_event_sco(sched_set_state_runnable_signal_sco);
+ else
+ da_handle_start_event_sco(sched_set_state_sco);
}
static void handle_schedule_entry(void *data, bool preempt, unsigned long ip)
diff --git a/kernel/trace/rv/monitors/sco/sco.h b/kernel/trace/rv/monitors/sco/sco.h
index 83ca9a03331af..2d05ab882b2a6 100644
--- a/kernel/trace/rv/monitors/sco/sco.h
+++ b/kernel/trace/rv/monitors/sco/sco.h
@@ -15,6 +15,7 @@ enum states_sco {
enum events_sco {
sched_set_state_sco = 0,
+ sched_set_state_runnable_signal_sco,
schedule_entry_sco,
schedule_exit_sco,
event_max_sco
@@ -35,17 +36,20 @@ static const struct automaton_sco automaton_sco = {
},
.event_names = {
"sched_set_state",
+ "sched_set_state_runnable_signal",
"schedule_entry",
"schedule_exit"
},
.function = {
{
thread_context_sco,
+ INVALID_STATE,
scheduling_context_sco,
INVALID_STATE
},
{
INVALID_STATE,
+ scheduling_context_sco,
INVALID_STATE,
thread_context_sco
},
diff --git a/tools/verification/models/sched/sco.dot b/tools/verification/models/sched/sco.dot
index 20b0e3b449a6b..4e44ed58c62a3 100644
--- a/tools/verification/models/sched/sco.dot
+++ b/tools/verification/models/sched/sco.dot
@@ -7,6 +7,7 @@ digraph state_automaton {
{node [shape = plaintext] "thread_context"};
"__init_thread_context" -> "thread_context";
"scheduling_context" [label = "scheduling_context"];
+ "scheduling_context" -> "scheduling_context" [ label = "sched_set_state_runnable_signal" ];
"scheduling_context" -> "thread_context" [ label = "schedule_exit" ];
"thread_context" [label = "thread_context", color = green3];
"thread_context" -> "scheduling_context" [ label = "schedule_entry" ];
--
2.50.1
next prev parent reply other threads:[~2025-07-15 7:16 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-15 7:14 [PATCH v3 00/17] rv: Add monitors to validate task switch Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 01/17] tools/rv: Do not skip idle in trace Gabriele Monaco
2025-07-16 11:50 ` Peter Zijlstra
2025-07-16 12:18 ` Gabriele Monaco
2025-07-16 12:41 ` Peter Zijlstra
2025-07-16 13:05 ` Gabriele Monaco
2025-07-16 13:08 ` Peter Zijlstra
2025-07-16 13:13 ` Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 02/17] tools/rv: Stop gracefully also on SIGTERM Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 03/17] rv: Add da_handle_start_run_event_ to per-task monitors Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 04/17] rv: Remove trailing whitespace from tracepoint string Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 05/17] rv: Return init error when registering monitors Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 06/17] rv: Use strings in da monitors tracepoints Gabriele Monaco
2025-07-15 14:11 ` Nam Cao
2025-07-15 7:14 ` [PATCH v3 07/17] rv: Adjust monitor dependencies Gabriele Monaco
2025-07-16 8:19 ` Nam Cao
2025-07-16 8:30 ` Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 08/17] verification/rvgen: Organise Kconfig entries for nested monitors Gabriele Monaco
2025-07-15 14:48 ` Nam Cao
2025-07-16 7:40 ` Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 09/17] tools/dot2c: Fix generated files going over 100 column limit Gabriele Monaco
2025-07-15 15:01 ` Nam Cao
[not found] ` <d69862275becf1d296c80a08b29b2081857a85a1.camel@redhat.com>
2025-07-16 9:34 ` Nam Cao
2025-07-15 7:14 ` [PATCH v3 10/17] rv: " Gabriele Monaco
2025-07-15 15:08 ` Nam Cao
2025-07-15 15:24 ` Gabriele Monaco
2025-07-16 8:13 ` Nam Cao
2025-07-16 9:07 ` Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 11/17] rv: Retry when da monitor detects race conditions Gabriele Monaco
2025-07-15 15:23 ` Nam Cao
2025-07-16 8:20 ` Gabriele Monaco
2025-07-16 8:27 ` Nam Cao
2025-07-16 8:38 ` Gabriele Monaco
2025-07-16 8:45 ` Nam Cao
2025-07-16 8:59 ` Gabriele Monaco
2025-07-16 9:02 ` Nam Cao
2025-07-15 7:14 ` [PATCH v3 12/17] sched: Adapt sched tracepoints for RV task model Gabriele Monaco
2025-07-16 12:38 ` Peter Zijlstra
2025-07-16 13:40 ` Gabriele Monaco
2025-07-16 13:45 ` Peter Zijlstra
2025-07-16 14:07 ` Gabriele Monaco
2025-07-16 14:19 ` Peter Zijlstra
2025-07-16 14:38 ` Gabriele Monaco
2025-07-16 15:31 ` Peter Zijlstra
2025-07-16 16:14 ` Gabriele Monaco
2025-07-16 15:09 ` Gabriele Monaco
2025-07-16 15:47 ` Peter Zijlstra
2025-07-15 7:14 ` Gabriele Monaco [this message]
2025-07-15 7:14 ` [PATCH v3 14/17] rv: Extend snroc model Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 15/17] rv: Replace tss monitor with more complete sts Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 16/17] rv: Add nrp and sssw per-task monitors Gabriele Monaco
2025-07-15 7:14 ` [PATCH v3 17/17] rv: Add opid per-cpu monitor Gabriele Monaco
2025-07-16 9:38 ` Nam Cao
2025-07-16 10:00 ` Gabriele Monaco
2025-07-18 10:26 ` Gabriele Monaco
2025-07-16 9:42 ` [PATCH v3 00/17] rv: Add monitors to validate task switch Nam Cao
2025-07-16 12:20 ` Gabriele Monaco
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250715071434.22508-14-gmonaco@redhat.com \
--to=gmonaco@redhat.com \
--cc=corbet@lwn.net \
--cc=jkacur@redhat.com \
--cc=jlelli@redhat.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=namcao@linutronix.de \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglozar@redhat.com \
--cc=williams@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).