From: Nam Cao <namcao@linutronix.de>
To: Steven Rostedt <rostedt@goodmis.org>,
Gabriele Monaco <gmonaco@redhat.com>,
linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: john.ogness@linutronix.de, Nam Cao <namcao@linutronix.de>
Subject: [PATCH v5 07/23] verification/dot2k: Replace is_container() hack with subparsers
Date: Tue, 29 Apr 2025 14:00:52 +0200 [thread overview]
Message-ID: <673d86384e3117fae2ccffe2e03e5c48e501655a.1745926331.git.namcao@linutronix.de> (raw)
In-Reply-To: <cover.1745926331.git.namcao@linutronix.de>
dot2k is used for both generating deterministic automaton (DA) monitor and
generating container monitor.
Generating DA monitor and generating container requires different
parameters. This is implemented by peeking at sys.argv and check whether
"--container" is specified, and use that information to make some
parameters optional or required.
This works, but is quite hacky and ugly.
Replace this hack with Python's built-in subparsers.
The old commands:
python3 dot2/dot2k -d wip.dot -t per_cpu
python3 dot2/dot2k -n sched --container
are equivalent to the new commands:
python3 dot2/dot2k monitor -d wip.dot -t per_cpu
python3 dot2/dot2k container -n sched
Reviewed-by: Gabriele Monaco <gmonaco@redhat.com>
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
tools/verification/dot2/dot2k | 37 +++++++++++++++++---------------
tools/verification/dot2/dot2k.py | 2 +-
2 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/tools/verification/dot2/dot2k b/tools/verification/dot2/dot2k
index 767064f415e7..133fb17d9d47 100644
--- a/tools/verification/dot2/dot2k
+++ b/tools/verification/dot2/dot2k
@@ -13,30 +13,33 @@ if __name__ == '__main__':
import argparse
import sys
- def is_container():
- """Should work even before parsing the arguments"""
- return "-c" in sys.argv or "--container" in sys.argv
-
parser = argparse.ArgumentParser(description='transform .dot file into kernel rv monitor')
- parser.add_argument('-d', "--dot", dest="dot_file", required=not is_container())
- parser.add_argument('-t', "--monitor_type", dest="monitor_type", required=not is_container(),
- help=f"Available options: {', '.join(dot2k.monitor_types.keys())}")
- parser.add_argument('-n', "--model_name", dest="model_name", required=is_container())
parser.add_argument("-D", "--description", dest="description", required=False)
parser.add_argument("-a", "--auto_patch", dest="auto_patch",
action="store_true", required=False,
help="Patch the kernel in place")
- parser.add_argument("-p", "--parent", dest="parent",
- required=False, help="Create a monitor nested to parent")
- parser.add_argument("-c", "--container", dest="container",
- action="store_true", required=False,
- help="Create an empty monitor to be used as a container")
+
+ subparsers = parser.add_subparsers(dest="subcmd", required=True)
+
+ monitor_parser = subparsers.add_parser("monitor")
+ monitor_parser.add_argument('-n', "--model_name", dest="model_name")
+ monitor_parser.add_argument("-p", "--parent", dest="parent",
+ required=False, help="Create a monitor nested to parent")
+ monitor_parser.add_argument('-d', "--dot", dest="dot_file")
+ monitor_parser.add_argument('-t', "--monitor_type", dest="monitor_type",
+ help=f"Available options: {', '.join(dot2k.monitor_types.keys())}")
+
+ container_parser = subparsers.add_parser("container")
+ container_parser.add_argument('-n', "--model_name", dest="model_name", required=True)
+
params = parser.parse_args()
- if not is_container():
- print("Opening and parsing the dot file %s" % params.dot_file)
try:
- monitor=dot2k(params.dot_file, params.monitor_type, vars(params))
+ if params.subcmd == "monitor":
+ print("Opening and parsing the dot file %s" % params.dot_file)
+ monitor = dot2k(params.dot_file, params.monitor_type, vars(params))
+ else:
+ monitor = dot2k(None, None, vars(params))
except Exception as e:
print('Error: '+ str(e))
print("Sorry : :-(")
@@ -45,7 +48,7 @@ if __name__ == '__main__':
print("Writing the monitor into the directory %s" % monitor.name)
monitor.print_files()
print("Almost done, checklist")
- if not is_container():
+ if params.subcmd == "monitor":
print(" - Edit the %s/%s.c to add the instrumentation" % (monitor.name, monitor.name))
print(monitor.fill_tracepoint_tooltip())
print(monitor.fill_makefile_tooltip())
diff --git a/tools/verification/dot2/dot2k.py b/tools/verification/dot2/dot2k.py
index 0922754454b9..9ec99e297012 100644
--- a/tools/verification/dot2/dot2k.py
+++ b/tools/verification/dot2/dot2k.py
@@ -19,7 +19,7 @@ class dot2k(Dot2c):
monitor_type = "per_cpu"
def __init__(self, file_path, MonitorType, extra_params={}):
- self.container = extra_params.get("container")
+ self.container = extra_params.get("subcmd") == "container"
self.parent = extra_params.get("parent")
self.__fill_rv_templates_dir()
--
2.39.5
next prev parent reply other threads:[~2025-04-29 12:01 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-29 12:00 [PATCH v5 00/23] RV: Linear temporal logic monitors for RT application Nam Cao
2025-04-29 12:00 ` [PATCH v5 01/23] rv: Add #undef TRACE_INCLUDE_FILE Nam Cao
2025-04-29 12:00 ` [PATCH v5 02/23] printk: Make vprintk_deferred() public Nam Cao
2025-04-29 12:00 ` [PATCH v5 03/23] panic: Add vpanic() Nam Cao
2025-04-29 12:00 ` [PATCH v5 04/23] rv: Let the reactors take care of buffers Nam Cao
2025-04-29 12:00 ` [PATCH v5 05/23] verification/dot2k: Make a separate dot2k_templates/Kconfig_container Nam Cao
2025-04-29 12:00 ` [PATCH v5 06/23] verification/dot2k: Remove __buff_to_string() Nam Cao
2025-04-29 12:00 ` Nam Cao [this message]
2025-04-29 12:00 ` [PATCH v5 08/23] rv: rename CONFIG_DA_MON_EVENTS to CONFIG_RV_MON_EVENTS Nam Cao
2025-04-29 12:00 ` [PATCH v5 09/23] verification/dot2k: Prepare the frontend for LTL inclusion Nam Cao
2025-04-29 12:00 ` [PATCH v5 10/23] Documentation/rv: Prepare monitor synthesis document " Nam Cao
2025-04-29 12:00 ` [PATCH v5 11/23] verification/rvgen: Restructure the templates files Nam Cao
2025-04-29 12:00 ` [PATCH v5 12/23] verification/rvgen: Restructure the classes to prepare for LTL inclusion Nam Cao
2025-04-29 12:00 ` [PATCH v5 13/23] rv: Add support for LTL monitors Nam Cao
2025-04-29 12:00 ` [PATCH v5 14/23] rv: Add rtapp container monitor Nam Cao
2025-04-29 12:01 ` [PATCH v5 15/23] x86/tracing: Remove redundant trace_pagefault_key Nam Cao
2025-04-29 12:01 ` [PATCH v5 16/23] x86/tracing: Move page fault trace points to generic Nam Cao
2025-04-29 12:01 ` [PATCH v5 17/23] arm64: mm: Add page fault trace points Nam Cao
2025-04-29 12:01 ` [PATCH v5 18/23] riscv: " Nam Cao
2025-04-29 12:01 ` [PATCH v5 19/23] rv: Add rtapp_pagefault monitor Nam Cao
2025-04-29 12:01 ` [PATCH v5 20/23] locking/rtmutex: Add block_on_rt_mutex tracepoints Nam Cao
2025-04-29 12:01 ` [PATCH v5 21/23] rv: Add rtapp_sleep monitor Nam Cao
2025-04-29 16:01 ` Gabriele Monaco
2025-04-29 17:20 ` Nam Cao
2025-04-30 8:05 ` Gabriele Monaco
2025-04-30 8:38 ` Nam Cao
2025-04-29 12:01 ` [PATCH v5 22/23] rv: Add documentation for rtapp monitor Nam Cao
2025-04-29 12:01 ` [PATCH v5 23/23] rv: Allow to configure the number of per-task monitor Nam Cao
2025-08-10 21:12 ` [PATCH v5 00/23] RV: Linear temporal logic monitors for RT application patchwork-bot+linux-riscv
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=673d86384e3117fae2ccffe2e03e5c48e501655a.1745926331.git.namcao@linutronix.de \
--to=namcao@linutronix.de \
--cc=gmonaco@redhat.com \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/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
all inboxes | Powered by JetHome®