From: Gabriele Monaco <gmonaco@redhat.com>
To: linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
linux-trace-kernel@vger.kernel.org
Cc: Gabriele Monaco <gmonaco@redhat.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>
Subject: [PATCH v2 11/11] tools/rv: Allow rv list to filter for container
Date: Thu, 13 Feb 2025 10:08:09 +0100 [thread overview]
Message-ID: <20250213090819.419470-12-gmonaco@redhat.com> (raw)
In-Reply-To: <20250213090819.419470-1-gmonaco@redhat.com>
Add possibility to supply the container name to rv list:
# rv list sched
mon1
mon2
mon3
This lists only monitors in sched, without indentation.
Supplying -h, any option (string starting with -) or more than 1
argument will still print the usage.
Passing a non-existent container prints nothing and passing no container
continues to print all monitors, showing indentation for nested
monitors, reported after their container.
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
---
tools/verification/rv/include/in_kernel.h | 2 +-
tools/verification/rv/src/in_kernel.c | 36 +++++++++++++++------
tools/verification/rv/src/rv.c | 38 +++++++++++++++--------
3 files changed, 53 insertions(+), 23 deletions(-)
diff --git a/tools/verification/rv/include/in_kernel.h b/tools/verification/rv/include/in_kernel.h
index 3090638c8d710..f3bfd3b9895fe 100644
--- a/tools/verification/rv/include/in_kernel.h
+++ b/tools/verification/rv/include/in_kernel.h
@@ -1,3 +1,3 @@
// SPDX-License-Identifier: GPL-2.0
-int ikm_list_monitors(void);
+int ikm_list_monitors(char *container);
int ikm_run_monitor(char *monitor, int argc, char **argv);
diff --git a/tools/verification/rv/src/in_kernel.c b/tools/verification/rv/src/in_kernel.c
index 032b851019290..c0dcee795c0de 100644
--- a/tools/verification/rv/src/in_kernel.c
+++ b/tools/verification/rv/src/in_kernel.c
@@ -180,19 +180,25 @@ static char *ikm_read_desc(char *monitor_name)
/*
* ikm_fill_monitor_definition - fill monitor's definition
*
- * Returns -1 on error, 0 otherwise.
+ * Returns -1 on error, 1 if the monitor does not belong in the container, 0 otherwise.
+ * container can be NULL
*/
-static int ikm_fill_monitor_definition(char *name, struct monitor *ikm)
+static int ikm_fill_monitor_definition(char *name, struct monitor *ikm, char *container)
{
int enabled;
char *desc, *nested_name;
nested_name = strstr(name, ":");
if (nested_name) {
+ /* it belongs in container if it starts with "container:" */
+ if (container && strstr(name, container) != name)
+ return 1;
*nested_name = '/';
++nested_name;
ikm->nested = 1;
} else {
+ if (container)
+ return 1;
nested_name = name;
ikm->nested = 0;
}
@@ -328,12 +334,12 @@ static int ikm_has_id(char *monitor_name)
*
* Returns 0 on success, -1 otherwise.
*/
-int ikm_list_monitors(void)
+int ikm_list_monitors(char *container)
{
char *available_monitors;
struct monitor ikm = {0};
char *curr, *next;
- int retval;
+ int retval, list_monitor = 0;
available_monitors = tracefs_instance_file_read(NULL, "rv/available_monitors", NULL);
@@ -347,17 +353,29 @@ int ikm_list_monitors(void)
next = strstr(curr, "\n");
*next = '\0';
- retval = ikm_fill_monitor_definition(curr, &ikm);
- if (retval)
+ retval = ikm_fill_monitor_definition(curr, &ikm, container);
+ if (retval < 0)
err_msg("ikm: error reading %d in kernel monitor, skipping\n", curr);
- printf("%s%-*s %s %s\n", ikm.nested ? " - " : "",
- ikm.nested ? MAX_DA_NAME_LEN - 3 : MAX_DA_NAME_LEN,
- ikm.name, ikm.desc, ikm.enabled ? "[ON]" : "[OFF]");
+ if (!retval) {
+ int indent = ikm.nested && !container;
+
+ list_monitor = 1;
+ printf("%s%-*s %s %s\n", indent ? " - " : "",
+ indent ? MAX_DA_NAME_LEN - 3 : MAX_DA_NAME_LEN,
+ ikm.name, ikm.desc, ikm.enabled ? "[ON]" : "[OFF]");
+ }
curr = ++next;
} while (strlen(curr));
+ if (!list_monitor) {
+ if (container)
+ printf("-- No monitor found in container %s --\n", container);
+ else
+ printf("-- No monitor found --\n");
+ }
+
free(available_monitors);
return 0;
diff --git a/tools/verification/rv/src/rv.c b/tools/verification/rv/src/rv.c
index 1ddb855328165..239de054d1e06 100644
--- a/tools/verification/rv/src/rv.c
+++ b/tools/verification/rv/src/rv.c
@@ -41,30 +41,42 @@ static void rv_list(int argc, char **argv)
{
static const char *const usage[] = {
"",
- " usage: rv list [-h]",
+ " usage: rv list [-h] [container]",
"",
" list all available monitors",
"",
" -h/--help: print this menu",
+ "",
+ " [container]: list only monitors in this container",
NULL,
};
- int i;
-
- if (argc > 1) {
+ int i, print_help = 0, retval = 0;
+ char *container = NULL;
+
+ if (argc == 2) {
+ if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) {
+ print_help = 1;
+ retval = 0;
+ } else if (argv[1][0] == '-') {
+ /* assume invalid option */
+ print_help = 1;
+ retval = 1;
+ } else
+ container = argv[1];
+ } else if (argc > 2) {
+ /* more than 2 is always usage */
+ print_help = 1;
+ retval = 1;
+ }
+ if (print_help) {
fprintf(stderr, "rv version %s\n", VERSION);
-
- /* more than 1 is always usage */
for (i = 0; usage[i]; i++)
fprintf(stderr, "%s\n", usage[i]);
-
- /* but only -h is valid */
- if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
- exit(0);
- else
- exit(1);
+ exit(retval);
}
- ikm_list_monitors();
+ ikm_list_monitors(container);
+
exit(0);
}
--
2.48.1
next prev parent reply other threads:[~2025-02-13 9:09 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-13 9:07 [PATCH v2 00/11] rv: Add scheduler specification monitors Gabriele Monaco
2025-02-13 9:07 ` [PATCH v2 01/11] tracing: Fix DECLARE_TRACE_CONDITION Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 02/11] rv: Add license identifiers to monitor files Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 03/11] sched: Add sched tracepoints for RV task model Gabriele Monaco
2025-02-14 8:00 ` kernel test robot
2025-02-14 11:15 ` Gabriele Monaco
2025-02-17 16:39 ` Steven Rostedt
2025-02-14 9:52 ` kernel test robot
2025-02-17 16:38 ` Steven Rostedt
2025-02-17 16:49 ` Peter Zijlstra
2025-02-17 17:16 ` Steven Rostedt
2025-02-18 7:06 ` Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 04/11] rv: Add option for nested monitors and include sched Gabriele Monaco
2025-02-16 22:39 ` kernel test robot
2025-02-17 6:56 ` Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 05/11] rv: Add sco and tss per-cpu monitors Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 06/11] rv: Add snroc per-task monitor Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 07/11] rv: Add scpd, snep and sncid per-cpu monitors Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 08/11] tools/rv: Add support for nested monitors Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 09/11] verification/dot2k: " Gabriele Monaco
2025-02-13 9:08 ` [PATCH v2 10/11] Documentation/rv: Add docs for the sched monitors Gabriele Monaco
2025-02-13 9:08 ` Gabriele Monaco [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-02-17 13:11 [PATCH v2 00/11] rv: Add scheduler specification monitors Gabriele Monaco
2025-02-17 13:12 ` [PATCH v2 11/11] tools/rv: Allow rv list to filter for container 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=20250213090819.419470-12-gmonaco@redhat.com \
--to=gmonaco@redhat.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.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;
as well as URLs for NNTP newsgroup(s).