Skip to content

Conversation

@kernel-patches-daemon-bpf-rc
Copy link

Pull request for series with
subject: selftests/bpf: Add stacktrace test for kprobe multi
version: 1
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137

@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: dd948aa
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: 5730dac
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: 5730dac
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: 9b5c111
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: 1193c46
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

Adding stacktrace test for kprobe multi probe.

Cc: Feng Yang <[email protected]>
Signed-off-by: Jiri Olsa <[email protected]>
@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: 105eb5d
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

@kernel-patches-daemon-bpf-rc
Copy link
Author

Upstream branch: d43029f
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
version: 1

Pull request is NOT updated. Failed to apply https://patchwork.kernel.org/project/netdevbpf/list/?series=1006137
error message:

Cmd('git') failed due to: exit code(128)
  cmdline: git am --3way
  stdout: 'Applying: selftests/bpf: Add stacktrace test for kprobe multi
Using index info to reconstruct a base tree...
M	tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
A	tools/testing/selftests/bpf/progs/test_stacktrace_map.c
Falling back to patching base and 3-way merge...
Auto-merging tools/testing/selftests/bpf/progs/stacktrace_map.c
CONFLICT (content): Merge conflict in tools/testing/selftests/bpf/progs/stacktrace_map.c
Auto-merging tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
CONFLICT (content): Merge conflict in tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
Patch failed at 0001 selftests/bpf: Add stacktrace test for kprobe multi'
  stderr: 'error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config advice.mergeConflict false"'

conflict:

diff --cc tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
index c23b97414813,922224adc86b..000000000000
--- a/tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
+++ b/tools/testing/selftests/bpf/prog_tests/stacktrace_map.c
@@@ -1,62 -1,130 +1,161 @@@
  // SPDX-License-Identifier: GPL-2.0
  #include <test_progs.h>
++<<<<<<< HEAD
 +#include "stacktrace_map.skel.h"
++=======
+ #include "test_stacktrace_map.skel.h"
++>>>>>>> selftests/bpf: Add stacktrace test for kprobe multi
  
- void test_stacktrace_map(void)
+ static void check_stackmap(int control_map_fd, int stackid_hmap_fd,
+ 			   int stackmap_fd, int stack_amap_fd)
+ {
+ 	__u32 key, val, duration = 0;
+ 	int err, stack_trace_len;
+ 
+ 	/* disable stack trace collection */
+ 	key = 0;
+ 	val = 1;
+ 	bpf_map_update_elem(control_map_fd, &key, &val, 0);
+ 
+ 	/* for every element in stackid_hmap, we can find a corresponding one
+ 	 * in stackmap, and vice versa.
+ 	 */
+ 	err = compare_map_keys(stackid_hmap_fd, stackmap_fd);
+ 	if (CHECK(err, "compare_map_keys stackid_hmap vs. stackmap",
+ 		  "err %d errno %d\n", err, errno))
+ 		return;
+ 
+ 	err = compare_map_keys(stackmap_fd, stackid_hmap_fd);
+ 	if (CHECK(err, "compare_map_keys stackmap vs. stackid_hmap",
+ 		  "err %d errno %d\n", err, errno))
+ 		return;
+ 
+ 	stack_trace_len = PERF_MAX_STACK_DEPTH * sizeof(__u64);
+ 	err = compare_stack_ips(stackmap_fd, stack_amap_fd, stack_trace_len);
+ 	CHECK(err, "compare_stack_ips stackmap vs. stack_amap",
+ 		"err %d errno %d\n", err, errno);
+ }
+ 
+ static void test_stacktrace_map_tp(void)
  {
 +	struct stacktrace_map *skel;
  	int control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd;
++<<<<<<< HEAD
 +	int err, stack_trace_len;
 +	__u32 key, val, stack_id, duration = 0;
 +	__u64 stack[PERF_MAX_STACK_DEPTH];
++=======
+ 	const char *prog_name = "oncpu";
+ 	int err, prog_fd;
+ 	const char *file = "./test_stacktrace_map.bpf.o";
+ 	__u32 duration = 0;
+ 	struct bpf_program *prog;
+ 	struct bpf_object *obj;
+ 	struct bpf_link *link;
++>>>>>>> selftests/bpf: Add stacktrace test for kprobe multi
  
 -	err = bpf_prog_test_load(file, BPF_PROG_TYPE_TRACEPOINT, &obj, &prog_fd);
 -	if (CHECK(err, "prog_load", "err %d errno %d\n", err, errno))
 +	skel = stacktrace_map__open_and_load();
 +	if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
  		return;
  
 -	prog = bpf_object__find_program_by_name(obj, prog_name);
 -	if (CHECK(!prog, "find_prog", "prog '%s' not found\n", prog_name))
 -		goto close_prog;
 -
 -	link = bpf_program__attach_tracepoint(prog, "sched", "sched_switch");
 -	if (!ASSERT_OK_PTR(link, "attach_tp"))
 -		goto close_prog;
 -
 -	/* find map fds */
 -	control_map_fd = bpf_find_map(__func__, obj, "control_map");
 -	if (CHECK_FAIL(control_map_fd < 0))
 -		goto disable_pmu;
 +	control_map_fd = bpf_map__fd(skel->maps.control_map);
 +	stackid_hmap_fd = bpf_map__fd(skel->maps.stackid_hmap);
 +	stackmap_fd = bpf_map__fd(skel->maps.stackmap);
 +	stack_amap_fd = bpf_map__fd(skel->maps.stack_amap);
  
 -	stackid_hmap_fd = bpf_find_map(__func__, obj, "stackid_hmap");
 -	if (CHECK_FAIL(stackid_hmap_fd < 0))
 -		goto disable_pmu;
 +	err = stacktrace_map__attach(skel);
 +	if (!ASSERT_OK(err, "skel_attach"))
 +		goto out;
 +	/* give some time for bpf program run */
 +	sleep(1);
  
 -	stackmap_fd = bpf_find_map(__func__, obj, "stackmap");
 -	if (CHECK_FAIL(stackmap_fd < 0))
 -		goto disable_pmu;
++<<<<<<< HEAD
 +	/* disable stack trace collection */
 +	key = 0;
 +	val = 1;
 +	bpf_map_update_elem(control_map_fd, &key, &val, 0);
  
 -	stack_amap_fd = bpf_find_map(__func__, obj, "stack_amap");
 -	if (CHECK_FAIL(stack_amap_fd < 0))
 -		goto disable_pmu;
 +	/* for every element in stackid_hmap, we can find a corresponding one
 +	 * in stackmap, and vice versa.
 +	 */
 +	err = compare_map_keys(stackid_hmap_fd, stackmap_fd);
 +	if (CHECK(err, "compare_map_keys stackid_hmap vs. stackmap",
 +		  "err %d errno %d\n", err, errno))
 +		goto out;
  
 -	/* give some time for bpf program run */
 -	sleep(1);
 +	err = compare_map_keys(stackmap_fd, stackid_hmap_fd);
 +	if (CHECK(err, "compare_map_keys stackmap vs. stackid_hmap",
 +		  "err %d errno %d\n", err, errno))
 +		goto out;
  
 +	stack_trace_len = PERF_MAX_STACK_DEPTH * sizeof(__u64);
 +	err = compare_stack_ips(stackmap_fd, stack_amap_fd, stack_trace_len);
 +	if (CHECK(err, "compare_stack_ips stackmap vs. stack_amap",
 +		  "err %d errno %d\n", err, errno))
 +		goto out;
 +
 +	stack_id = skel->bss->stack_id;
 +	err = bpf_map_lookup_and_delete_elem(stackmap_fd, &stack_id,  stack);
 +	if (!ASSERT_OK(err, "lookup and delete target stack_id"))
 +		goto out;
 +
 +	err = bpf_map_lookup_elem(stackmap_fd, &stack_id, stack);
 +	if (!ASSERT_EQ(err, -ENOENT, "lookup deleted stack_id"))
 +		goto out;
 +out:
 +	stacktrace_map__destroy(skel);
++=======
+ 	check_stackmap(control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd);
+ 
+ disable_pmu:
+ 	bpf_link__destroy(link);
+ close_prog:
+ 	bpf_object__close(obj);
++>>>>>>> selftests/bpf: Add stacktrace test for kprobe multi
+ }
+ 
+ static void test_stacktrace_map_kprobe_multi(bool retprobe)
+ {
+ 	int control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd;
+ 	LIBBPF_OPTS(bpf_kprobe_multi_opts, opts,
+ 		.retprobe = retprobe
+ 	);
+ 	LIBBPF_OPTS(bpf_test_run_opts, topts);
+ 	struct test_stacktrace_map *skel;
+ 	struct bpf_link *link;
+ 	int prog_fd, err;
+ 
+ 	skel = test_stacktrace_map__open_and_load();
+ 	if (!ASSERT_OK_PTR(skel, "test_stacktrace_map__open_and_load"))
+ 		return;
+ 
+ 	link = bpf_program__attach_kprobe_multi_opts(skel->progs.kprobe,
+ 						     "bpf_fentry_test1", &opts);
+ 	if (!ASSERT_OK_PTR(link, "bpf_program__attach_kprobe_multi_opts"))
+ 		goto cleanup;
+ 
+ 	prog_fd = bpf_program__fd(skel->progs.trigger);
+ 	err = bpf_prog_test_run_opts(prog_fd, &topts);
+ 	ASSERT_OK(err, "test_run");
+ 	ASSERT_EQ(topts.retval, 0, "test_run");
+ 
+ 	control_map_fd  = bpf_map__fd(skel->maps.control_map);
+ 	stackid_hmap_fd = bpf_map__fd(skel->maps.stackid_hmap);
+ 	stackmap_fd     = bpf_map__fd(skel->maps.stackmap);
+ 	stack_amap_fd   = bpf_map__fd(skel->maps.stack_amap);
+ 
+ 	check_stackmap(control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd);
+ 
+ cleanup:
+ 	test_stacktrace_map__destroy(skel);
+ }
+ 
+ void test_stacktrace_map(void)
+ {
+ 	if (test__start_subtest("tp"))
+ 		test_stacktrace_map_tp();
+ 	if (test__start_subtest("kprobe_multi"))
+ 		test_stacktrace_map_kprobe_multi(false);
+ 	if (test__start_subtest("kretprobe_multi"))
+ 		test_stacktrace_map_kprobe_multi(true);
  }
diff --cc tools/testing/selftests/bpf/progs/stacktrace_map.c
index 0c77df05be7f,7a27e162a407..000000000000
--- a/tools/testing/selftests/bpf/progs/stacktrace_map.c
+++ b/tools/testing/selftests/bpf/progs/stacktrace_map.c
@@@ -50,9 -51,7 +51,13 @@@ struct sched_switch_args 
  	int next_prio;
  };
  
++<<<<<<< HEAD:tools/testing/selftests/bpf/progs/stacktrace_map.c
 +__u32 stack_id;
 +SEC("tracepoint/sched/sched_switch")
 +int oncpu(struct sched_switch_args *ctx)
++=======
+ static inline void test_stackmap(void *ctx)
++>>>>>>> selftests/bpf: Add stacktrace test for kprobe multi:tools/testing/selftests/bpf/progs/test_stacktrace_map.c
  {
  	__u32 max_len = PERF_MAX_STACK_DEPTH * sizeof(__u64);
  	__u32 key = 0, val = 0, *value_p;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants