From nobody Thu Dec 18 08:38:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7133525B668 for ; Tue, 25 Mar 2025 14:34:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742913259; cv=none; b=Q+s9pPxrPCFYoifWm+weopWxgmMGq4iEvPptWDJttoL0NAmHfWxQ1D4dmXDILvpwanQCrKc7D3XvWLpXlUXiQtMAU6MKzPmtpSsiQh09ipgyGWD8Qh3aTZEwUoTjft7FTkIUfl33WSKCk1vV8dQ9xtW5NOXsrEqSqAqqhVoJUDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742913259; c=relaxed/simple; bh=CryzNEnxPBRHXq02oYSPUJ0eUX222lqvKXI2gty0v4w=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=K/0IiPLEjSORvB7xJuVat94YLsSl6dAQXFo7ES3rExUJZJyliPg1kRp4Fk8nZ3mrrXs4IDIBvEhx6SQAJQv+o4oyFlwvBpNXe/JcOW9xzckM+nm27Gv7knOpKO/zK/3Y/+RuQydT/szDCEU/M6K6H1XY6rd8sKPHqbdVvqNilug= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0CD11C4CEF1; Tue, 25 Mar 2025 14:34:19 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98) (envelope-from ) id 1tx5Mt-00000002P2p-1xW6; Tue, 25 Mar 2025 10:35:03 -0400 Message-ID: <20250325143503.318376722@goodmis.org> User-Agent: quilt/0.68 Date: Tue, 25 Mar 2025 10:34:45 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Ingo Molnar , Peter Zijlstra , Juri Lelli , Gabriele Monaco Subject: [for-next][PATCH 9/9] tools/rv: Allow rv list to filter for container References: <20250325143436.168114339@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Gabriele Monaco 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. Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Juri Lelli Link: https://lore.kernel.org/20250305140406.350227-10-gmonaco@redhat.com Signed-off-by: Gabriele Monaco Signed-off-by: Steven Rostedt (Google) --- 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 3090638c8d71..f3bfd3b9895f 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 032b85101929..c0dcee795c0d 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, ch= ar *container) { int enabled; char *desc, *nested_name; =20 nested_name =3D strstr(name, ":"); if (nested_name) { + /* it belongs in container if it starts with "container:" */ + if (container && strstr(name, container) !=3D name) + return 1; *nested_name =3D '/'; ++nested_name; ikm->nested =3D 1; } else { + if (container) + return 1; nested_name =3D name; ikm->nested =3D 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 =3D {0}; char *curr, *next; - int retval; + int retval, list_monitor =3D 0; =20 available_monitors =3D tracefs_instance_file_read(NULL, "rv/available_mon= itors", NULL); =20 @@ -347,17 +353,29 @@ int ikm_list_monitors(void) next =3D strstr(curr, "\n"); *next =3D '\0'; =20 - retval =3D ikm_fill_monitor_definition(curr, &ikm); - if (retval) + retval =3D ikm_fill_monitor_definition(curr, &ikm, container); + if (retval < 0) err_msg("ikm: error reading %d in kernel monitor, skipping\n", curr); =20 - 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 =3D ikm.nested && !container; + + list_monitor =3D 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 =3D ++next; =20 } while (strlen(curr)); =20 + if (!list_monitor) { + if (container) + printf("-- No monitor found in container %s --\n", container); + else + printf("-- No monitor found --\n"); + } + free(available_monitors); =20 return 0; diff --git a/tools/verification/rv/src/rv.c b/tools/verification/rv/src/rv.c index 1ddb85532816..239de054d1e0 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[] =3D { "", - " 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 =3D 0, retval =3D 0; + char *container =3D NULL; + + if (argc =3D=3D 2) { + if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) { + print_help =3D 1; + retval =3D 0; + } else if (argv[1][0] =3D=3D '-') { + /* assume invalid option */ + print_help =3D 1; + retval =3D 1; + } else + container =3D argv[1]; + } else if (argc > 2) { + /* more than 2 is always usage */ + print_help =3D 1; + retval =3D 1; + } + if (print_help) { fprintf(stderr, "rv version %s\n", VERSION); - - /* more than 1 is always usage */ for (i =3D 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); } =20 - ikm_list_monitors(); + ikm_list_monitors(container); + exit(0); } =20 --=20 2.47.2