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>
Subject: [RFC PATCH v2 07/12] rv: Adapt the sco monitor to the new set_state
Date: Wed, 14 May 2025 10:43:09 +0200 [thread overview]
Message-ID: <20250514084314.57976-8-gmonaco@redhat.com> (raw)
In-Reply-To: <20250514084314.57976-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.
Adapt the handlers prototypes for the sco monitor.
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 | 8 ++++--
kernel/trace/rv/monitors/sco/sco.h | 6 ++--
tools/verification/models/sched/sco.dot | 1 +
4 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/Documentation/trace/rv/monitor_sched.rst b/Documentation/trace/rv/monitor_sched.rst
index 24b2c62a3bc2..6f76bba94d9f 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 66f4639d46ac..6457ff2469d0 100644
--- a/kernel/trace/rv/monitors/sco/sco.c
+++ b/kernel/trace/rv/monitors/sco/sco.c
@@ -19,9 +19,13 @@
static struct rv_monitor rv_sco;
DECLARE_DA_MON_PER_CPU(sco, unsigned char);
-static void handle_sched_set_state(void *data, struct task_struct *tsk, int state)
+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 7a4c1f2d5ca1..302750687f9c 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,12 +36,13 @@ 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, scheduling_context_sco, INVALID_STATE },
- { INVALID_STATE, INVALID_STATE, thread_context_sco },
+ { thread_context_sco, INVALID_STATE, scheduling_context_sco, INVALID_STATE },
+ { INVALID_STATE, scheduling_context_sco, INVALID_STATE, thread_context_sco },
},
.initial_state = thread_context_sco,
.final_states = { 1, 0 },
diff --git a/tools/verification/models/sched/sco.dot b/tools/verification/models/sched/sco.dot
index 20b0e3b449a6..4e44ed58c62a 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.49.0
next parent reply other threads:[~2025-05-14 8:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20250514084314.57976-1-gmonaco@redhat.com>
2025-05-14 8:43 ` Gabriele Monaco [this message]
2025-05-19 8:42 ` [RFC PATCH v2 07/12] rv: Adapt the sco monitor to the new set_state Nam Cao
2025-05-19 9:04 ` Gabriele Monaco
2025-05-14 8:43 ` [RFC PATCH v2 08/12] rv: Extend and adapt snroc model Gabriele Monaco
2025-05-14 8:43 ` [RFC PATCH v2 09/12] rv: Replace tss monitor with more complete sts Gabriele Monaco
2025-06-24 7:36 ` Nam Cao
2025-06-24 14:44 ` Gabriele Monaco
2025-06-24 15:50 ` Nam Cao
2025-06-24 19:31 ` Steven Rostedt
2025-06-27 15:02 ` Nam Cao
2025-05-14 8:43 ` [RFC PATCH v2 11/12] rv: Add nrp and sssw per-task monitors Gabriele Monaco
2025-05-14 8:43 ` [RFC PATCH v2 12/12] rv: Add opid per-cpu monitor Gabriele Monaco
2025-05-27 13:37 ` Nam Cao
2025-05-27 14:35 ` Gabriele Monaco
2025-05-27 14:50 ` Nam Cao
2025-05-28 11:27 ` 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=20250514084314.57976-8-gmonaco@redhat.com \
--to=gmonaco@redhat.com \
--cc=corbet@lwn.net \
--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 \
/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).