public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list
@ 2025-03-01  0:01 Eduard Zingerman
  2025-03-01  0:01 ` [PATCH bpf-next v2 1/3] " Eduard Zingerman
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Eduard Zingerman @ 2025-03-01  0:01 UTC (permalink / raw)
  To: bpf, ast
  Cc: andrii, daniel, martin.lau, kernel-team, yonghong.song,
	Eduard Zingerman

A few small veristat improvements:
- It is possible to hit command line parameters number limit,
  e.g. when running veristat for all object files generated for
  test_progs. This patch-set adds an option to read objects files list
  from a file.
- Correct usage of strerror() function.
- Avoid printing log lines to CSV output.

Changelog:
- v1 -> v2:
  - replace strerror(errno) with strerror(-err) in patch #2 (Andrii)

v1: https://lore.kernel.org/bpf/3ee39a16-bc54-4820-984a-0add2b5b5f86@gmail.com/T/

Eduard Zingerman (3):
  veristat: @files-list.txt notation for object files list
  veristat: strerror expects positive number (errno)
  veristat: report program type guess results to sdterr

 tools/testing/selftests/bpf/veristat.c | 70 +++++++++++++++++++++-----
 1 file changed, 57 insertions(+), 13 deletions(-)

-- 
2.48.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH bpf-next v2 1/3] veristat: @files-list.txt notation for object files list
  2025-03-01  0:01 [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list Eduard Zingerman
@ 2025-03-01  0:01 ` Eduard Zingerman
  2025-03-01  0:01 ` [PATCH bpf-next v2 2/3] veristat: strerror expects positive number (errno) Eduard Zingerman
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Eduard Zingerman @ 2025-03-01  0:01 UTC (permalink / raw)
  To: bpf, ast
  Cc: andrii, daniel, martin.lau, kernel-team, yonghong.song,
	Eduard Zingerman, Mykyta Yatsenko

Allow reading object file list from file.
E.g. the following command:

  ./veristat @list.txt

Is equivalent to the following invocation:

  ./veristat line-1 line-2 ... line-N

Where line-i corresponds to lines from list.txt.
Lines starting with '#' are ignored.

Acked-by: Mykyta Yatsenko <mykyta.yatsenko5@gmail.com>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
---
 tools/testing/selftests/bpf/veristat.c | 62 ++++++++++++++++++++++----
 1 file changed, 53 insertions(+), 9 deletions(-)

diff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftests/bpf/veristat.c
index 175a03e6c5ef..8bc462299290 100644
--- a/tools/testing/selftests/bpf/veristat.c
+++ b/tools/testing/selftests/bpf/veristat.c
@@ -268,10 +268,11 @@ static int append_filter(struct filter **filters, int *cnt, const char *str);
 static int append_filter_file(const char *path);
 static int append_var_preset(struct var_preset **presets, int *cnt, const char *expr);
 static int append_var_preset_file(const char *filename);
+static int append_file(const char *path);
+static int append_file_from_file(const char *path);
 
 static error_t parse_arg(int key, char *arg, struct argp_state *state)
 {
-	void *tmp;
 	int err;
 
 	switch (key) {
@@ -381,14 +382,14 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
 		break;
 	}
 	case ARGP_KEY_ARG:
-		tmp = realloc(env.filenames, (env.filename_cnt + 1) * sizeof(*env.filenames));
-		if (!tmp)
-			return -ENOMEM;
-		env.filenames = tmp;
-		env.filenames[env.filename_cnt] = strdup(arg);
-		if (!env.filenames[env.filename_cnt])
-			return -ENOMEM;
-		env.filename_cnt++;
+		if (arg[0] == '@')
+			err = append_file_from_file(arg + 1);
+		else
+			err = append_file(arg);
+		if (err) {
+			fprintf(stderr, "Failed to collect BPF object files: %d\n", err);
+			return err;
+		}
 		break;
 	default:
 		return ARGP_ERR_UNKNOWN;
@@ -689,6 +690,49 @@ static const struct stat_specs default_output_spec = {
 	},
 };
 
+static int append_file(const char *path)
+{
+	void *tmp;
+
+	tmp = realloc(env.filenames, (env.filename_cnt + 1) * sizeof(*env.filenames));
+	if (!tmp)
+		return -ENOMEM;
+	env.filenames = tmp;
+	env.filenames[env.filename_cnt] = strdup(path);
+	if (!env.filenames[env.filename_cnt])
+		return -ENOMEM;
+	env.filename_cnt++;
+	return 0;
+}
+
+static int append_file_from_file(const char *path)
+{
+	char buf[1024];
+	int err = 0;
+	FILE *f;
+
+	f = fopen(path, "r");
+	if (!f) {
+		err = -errno;
+		fprintf(stderr, "Failed to open object files list in '%s': %s\n",
+			path, strerror(errno));
+		return err;
+	}
+
+	while (fscanf(f, " %1023[^\n]\n", buf) == 1) {
+		/* lines starting with # are comments, skip them */
+		if (buf[0] == '\0' || buf[0] == '#')
+			continue;
+		err = append_file(buf);
+		if (err)
+			goto cleanup;
+	}
+
+cleanup:
+	fclose(f);
+	return err;
+}
+
 static const struct stat_specs default_csv_output_spec = {
 	.spec_cnt = 14,
 	.ids = {
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH bpf-next v2 2/3] veristat: strerror expects positive number (errno)
  2025-03-01  0:01 [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list Eduard Zingerman
  2025-03-01  0:01 ` [PATCH bpf-next v2 1/3] " Eduard Zingerman
@ 2025-03-01  0:01 ` Eduard Zingerman
  2025-03-01  0:01 ` [PATCH bpf-next v2 3/3] veristat: report program type guess results to sdterr Eduard Zingerman
  2025-03-03 22:00 ` [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: Eduard Zingerman @ 2025-03-01  0:01 UTC (permalink / raw)
  To: bpf, ast
  Cc: andrii, daniel, martin.lau, kernel-team, yonghong.song,
	Eduard Zingerman, Mykyta Yatsenko

Before:

  ./veristat -G @foobar iters.bpf.o
  Failed to open presets in 'foobar': Unknown error -2
  ...

After:

  ./veristat -G @foobar iters.bpf.o
  Failed to open presets in 'foobar': No such file or directory
  ...

Acked-by: Mykyta Yatsenko <mykyta.yatsenko5@gmail.com>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
---
 tools/testing/selftests/bpf/veristat.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftests/bpf/veristat.c
index 8bc462299290..41dfcb6f5690 100644
--- a/tools/testing/selftests/bpf/veristat.c
+++ b/tools/testing/selftests/bpf/veristat.c
@@ -660,7 +660,7 @@ static int append_filter_file(const char *path)
 	f = fopen(path, "r");
 	if (!f) {
 		err = -errno;
-		fprintf(stderr, "Failed to open filters in '%s': %s\n", path, strerror(err));
+		fprintf(stderr, "Failed to open filters in '%s': %s\n", path, strerror(-err));
 		return err;
 	}
 
@@ -1422,7 +1422,7 @@ static int append_var_preset_file(const char *filename)
 	f = fopen(filename, "rt");
 	if (!f) {
 		err = -errno;
-		fprintf(stderr, "Failed to open presets in '%s': %s\n", filename, strerror(err));
+		fprintf(stderr, "Failed to open presets in '%s': %s\n", filename, strerror(-err));
 		return -EINVAL;
 	}
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH bpf-next v2 3/3] veristat: report program type guess results to sdterr
  2025-03-01  0:01 [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list Eduard Zingerman
  2025-03-01  0:01 ` [PATCH bpf-next v2 1/3] " Eduard Zingerman
  2025-03-01  0:01 ` [PATCH bpf-next v2 2/3] veristat: strerror expects positive number (errno) Eduard Zingerman
@ 2025-03-01  0:01 ` Eduard Zingerman
  2025-03-03 22:00 ` [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: Eduard Zingerman @ 2025-03-01  0:01 UTC (permalink / raw)
  To: bpf, ast
  Cc: andrii, daniel, martin.lau, kernel-team, yonghong.song,
	Eduard Zingerman, Mykyta Yatsenko

In order not to pollute CSV output, e.g.:

  $ ./veristat -o csv exceptions_ext.bpf.o > test.csv
  Using guessed program type 'sched_cls' for exceptions_ext.bpf.o/extension...
  Using guessed program type 'sched_cls' for exceptions_ext.bpf.o/throwing_extension...

Acked-by: Mykyta Yatsenko <mykyta.yatsenko5@gmail.com>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
---
 tools/testing/selftests/bpf/veristat.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftests/bpf/veristat.c
index 41dfcb6f5690..a18972ffdeb6 100644
--- a/tools/testing/selftests/bpf/veristat.c
+++ b/tools/testing/selftests/bpf/veristat.c
@@ -1234,13 +1234,13 @@ static void fixup_obj(struct bpf_object *obj, struct bpf_program *prog, const ch
 			bpf_program__set_expected_attach_type(prog, attach_type);
 
 			if (!env.quiet) {
-				printf("Using guessed program type '%s' for %s/%s...\n",
+				fprintf(stderr, "Using guessed program type '%s' for %s/%s...\n",
 					libbpf_bpf_prog_type_str(prog_type),
 					filename, prog_name);
 			}
 		} else {
 			if (!env.quiet) {
-				printf("Failed to guess program type for freplace program with context type name '%s' for %s/%s. Consider using canonical type names to help veristat...\n",
+				fprintf(stderr, "Failed to guess program type for freplace program with context type name '%s' for %s/%s. Consider using canonical type names to help veristat...\n",
 					ctx_name, filename, prog_name);
 			}
 		}
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list
  2025-03-01  0:01 [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list Eduard Zingerman
                   ` (2 preceding siblings ...)
  2025-03-01  0:01 ` [PATCH bpf-next v2 3/3] veristat: report program type guess results to sdterr Eduard Zingerman
@ 2025-03-03 22:00 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-03-03 22:00 UTC (permalink / raw)
  To: Eduard Zingerman
  Cc: bpf, ast, andrii, daniel, martin.lau, kernel-team, yonghong.song

Hello:

This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:

On Fri, 28 Feb 2025 16:01:44 -0800 you wrote:
> A few small veristat improvements:
> - It is possible to hit command line parameters number limit,
>   e.g. when running veristat for all object files generated for
>   test_progs. This patch-set adds an option to read objects files list
>   from a file.
> - Correct usage of strerror() function.
> - Avoid printing log lines to CSV output.
> 
> [...]

Here is the summary with links:
  - [bpf-next,v2,1/3] veristat: @files-list.txt notation for object files list
    https://git.kernel.org/bpf/bpf-next/c/128cd7672577
  - [bpf-next,v2,2/3] veristat: strerror expects positive number (errno)
    https://git.kernel.org/bpf/bpf-next/c/164975333cec
  - [bpf-next,v2,3/3] veristat: report program type guess results to sdterr
    https://git.kernel.org/bpf/bpf-next/c/b12752801e44

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-03-03 21:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-01  0:01 [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list Eduard Zingerman
2025-03-01  0:01 ` [PATCH bpf-next v2 1/3] " Eduard Zingerman
2025-03-01  0:01 ` [PATCH bpf-next v2 2/3] veristat: strerror expects positive number (errno) Eduard Zingerman
2025-03-01  0:01 ` [PATCH bpf-next v2 3/3] veristat: report program type guess results to sdterr Eduard Zingerman
2025-03-03 22:00 ` [PATCH bpf-next v2 0/3] veristat: @files-list.txt notation for object files list patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox