From: Gabriele Monaco <gmonaco@redhat.com>
To: linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
Nam Cao <namcao@linutronix.de>, Juri Lelli <jlelli@redhat.com>,
Gabriele Monaco <gmonaco@redhat.com>,
linux-trace-kernel@vger.kernel.org
Cc: Tomas Glozar <tglozar@redhat.com>,
Clark Williams <williams@redhat.com>,
John Kacur <jkacur@redhat.com>
Subject: [PATCH v4 12/15] verification/rvgen: Add support for per-obj monitors
Date: Fri, 16 Jan 2026 13:39:08 +0100 [thread overview]
Message-ID: <20260116123911.130300-13-gmonaco@redhat.com> (raw)
In-Reply-To: <20260116123911.130300-1-gmonaco@redhat.com>
The special per-object monitor type was just introduced in RV, this
requires the user to define some functions and type specific to the
object.
Adapt rvgen to add stub definitions for the monitor_target type and
other modifications required to create per-object monitors.
Reviewed-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
---
Notes:
V3:
* Add _is_id_monitor() in dot2k to handle per-obj together with per-task
tools/verification/rvgen/rvgen/automata.py | 1 +
tools/verification/rvgen/rvgen/dot2k.py | 17 +++++++++++++----
tools/verification/rvgen/rvgen/generator.py | 2 +-
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/tools/verification/rvgen/rvgen/automata.py b/tools/verification/rvgen/rvgen/automata.py
index 252c9960ee1c..b7330044d4be 100644
--- a/tools/verification/rvgen/rvgen/automata.py
+++ b/tools/verification/rvgen/rvgen/automata.py
@@ -66,6 +66,7 @@ class Automata:
self.events_start, self.events_start_run = self.__store_init_events()
self.env_stored = sorted(self.env_stored)
self.constraint_vars = sorted(self.constraint_vars)
+ self.self_loop_reset_events = sorted(self.self_loop_reset_events)
def __get_model_name(self) -> str:
basename = ntpath.basename(self.__dot_path)
diff --git a/tools/verification/rvgen/rvgen/dot2k.py b/tools/verification/rvgen/rvgen/dot2k.py
index e72369ec1ad7..42111b477847 100644
--- a/tools/verification/rvgen/rvgen/dot2k.py
+++ b/tools/verification/rvgen/rvgen/dot2k.py
@@ -27,6 +27,8 @@ class dot2k(Monitor, Dot2c):
def fill_monitor_type(self) -> str:
buff = [ self.monitor_type.upper() ]
buff += self._fill_timer_type()
+ if self.monitor_type == "per_obj":
+ buff.append("typedef /* XXX: define the target type */ *monitor_target;")
return "\n".join(buff)
def fill_tracepoint_handlers_skel(self) -> str:
@@ -45,6 +47,10 @@ class dot2k(Monitor, Dot2c):
if self.monitor_type == "per_task":
buff.append("\tstruct task_struct *p = /* XXX: how do I get p? */;");
buff.append("\tda_%s(p, %s%s);" % (handle, event, self.enum_suffix));
+ elif self.monitor_type == "per_obj":
+ buff.append("\tint id = /* XXX: how do I get the id? */;");
+ buff.append("\tmonitor_target t = /* XXX: how do I get t? */;");
+ buff.append("\tda_%s(id, t, %s%s);" % (handle, event, self.enum_suffix));
else:
buff.append("\tda_%s(%s%s);" % (handle, event, self.enum_suffix));
buff.append("}")
@@ -92,13 +98,16 @@ class dot2k(Monitor, Dot2c):
return '\n'.join(buff)
+ def _is_id_monitor(self) -> bool:
+ return self.monitor_type in ("per_task", "per_obj")
+
def fill_monitor_class_type(self) -> str:
- if self.monitor_type == "per_task":
+ if self._is_id_monitor():
return "DA_MON_EVENTS_ID"
return "DA_MON_EVENTS_IMPLICIT"
def fill_monitor_class(self) -> str:
- if self.monitor_type == "per_task":
+ if self._is_id_monitor():
return "da_monitor_id"
return "da_monitor"
@@ -122,7 +131,7 @@ class dot2k(Monitor, Dot2c):
}
tp_args_id = ("int ", "id")
tp_args = tp_args_dict[tp_type]
- if self.monitor_type == "per_task":
+ if self._is_id_monitor():
tp_args.insert(0, tp_args_id)
tp_proto_c = ", ".join([a+b for a,b in tp_args])
tp_args_c = ", ".join([b for a,b in tp_args])
@@ -169,7 +178,7 @@ class ha2k(dot2k):
self.__parse_constraints()
def fill_monitor_class_type(self) -> str:
- if self.monitor_type == "per_task":
+ if self._is_id_monitor():
return "HA_MON_EVENTS_ID"
return "HA_MON_EVENTS_IMPLICIT"
diff --git a/tools/verification/rvgen/rvgen/generator.py b/tools/verification/rvgen/rvgen/generator.py
index b80af3fd6701..5eac12e110dc 100644
--- a/tools/verification/rvgen/rvgen/generator.py
+++ b/tools/verification/rvgen/rvgen/generator.py
@@ -243,7 +243,7 @@ obj-$(CONFIG_RV_MON_%s) += monitors/%s/%s.o
class Monitor(RVGenerator):
- monitor_types = { "global" : 1, "per_cpu" : 2, "per_task" : 3 }
+ monitor_types = { "global" : 1, "per_cpu" : 2, "per_task" : 3, "per_obj" : 4 }
def __init__(self, extra_params={}):
super().__init__(extra_params)
--
2.52.0
next prev parent reply other threads:[~2026-01-16 12:40 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-16 12:38 [PATCH v4 00/15] rv: Add Hybrid Automata monitor type, per-object and deadline monitors Gabriele Monaco
2026-01-16 12:38 ` [PATCH v4 01/15] rv: Unify DA event handling functions across monitor types Gabriele Monaco
2026-01-16 12:38 ` [PATCH v4 02/15] rv: Add Hybrid Automata monitor type Gabriele Monaco
2026-01-16 12:38 ` [PATCH v4 03/15] verification/rvgen: Allow spaces in and events strings Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 04/15] verification/rvgen: Add support for Hybrid Automata Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 05/15] Documentation/rv: Add documentation about hybrid automata Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 06/15] rv: Add sample hybrid monitors stall Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 07/15] rv: Convert the opid monitor to a hybrid automaton Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 08/15] sched: Export hidden tracepoints to modules Gabriele Monaco
2026-01-16 14:00 ` Phil Auld
2026-01-16 14:24 ` Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 09/15] sched: Add deadline tracepoints Gabriele Monaco
2026-01-19 10:20 ` Juri Lelli
2026-01-16 12:39 ` [PATCH v4 10/15] sched: Add task enqueue/dequeue trace points Gabriele Monaco
2026-01-16 14:50 ` K Prateek Nayak
2026-01-16 15:01 ` Gabriele Monaco
2026-01-16 12:39 ` [PATCH v4 11/15] rv: Add support for per-object monitors in DA/HA Gabriele Monaco
2026-01-16 12:39 ` Gabriele Monaco [this message]
2026-01-16 12:39 ` [PATCH v4 13/15] sched/deadline: Move some utility functions to deadline.h Gabriele Monaco
2026-01-19 10:08 ` Juri Lelli
2026-01-16 12:39 ` [PATCH v4 14/15] rv: Add deadline monitors Gabriele Monaco
2026-01-19 11:04 ` Juri Lelli
2026-01-19 11:35 ` Gabriele Monaco
2026-01-19 13:16 ` Juri Lelli
2026-01-16 12:39 ` [PATCH v4 15/15] rv: Add dl_server specific monitors 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=20260116123911.130300-13-gmonaco@redhat.com \
--to=gmonaco@redhat.com \
--cc=jkacur@redhat.com \
--cc=jlelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=namcao@linutronix.de \
--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