]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
selftests/bpf: Use read_perf_max_sample_freq() in perf_event_stackmap
authorSong Liu <song@kernel.org>
Wed, 12 Apr 2023 21:04:21 +0000 (14:04 -0700)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 7 Jul 2023 10:16:59 +0000 (12:16 +0200)
BugLink: https://bugs.launchpad.net/bugs/2025067
[ Upstream commit de6d014a09bf12a9a8959d60c0a1d4a41d394a89 ]

Currently, perf_event sample period in perf_event_stackmap is set too low
that the test fails randomly. Fix this by using the max sample frequency,
from read_perf_max_sample_freq().

Move read_perf_max_sample_freq() to testing_helpers.c. Replace the CHECK()
with if-printf, as CHECK is not available in testing_helpers.c.

Fixes: 1da4864c2b20 ("selftests/bpf: Add callchain_stackid")
Signed-off-by: Song Liu <song@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230412210423.900851-2-song@kernel.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
tools/testing/selftests/bpf/prog_tests/perf_event_stackmap.c
tools/testing/selftests/bpf/prog_tests/stacktrace_build_id_nmi.c
tools/testing/selftests/bpf/testing_helpers.c
tools/testing/selftests/bpf/testing_helpers.h

index 33144c9432aebc7170a7f3716d082d058251fb3d..f4aad35afae1634c1e9e1a4bda2ccb8c400d1ae4 100644 (file)
@@ -63,7 +63,8 @@ void test_perf_event_stackmap(void)
                        PERF_SAMPLE_BRANCH_NO_FLAGS |
                        PERF_SAMPLE_BRANCH_NO_CYCLES |
                        PERF_SAMPLE_BRANCH_CALL_STACK,
-               .sample_period = 5000,
+               .freq = 1,
+               .sample_freq = read_perf_max_sample_freq(),
                .size = sizeof(struct perf_event_attr),
        };
        struct perf_event_stackmap *skel;
index f4ea1a215ce4d7ef7bd648efef67584c2319a474..704f7f6c3704ae91c309c657b32c2ea4eae029fe 100644 (file)
@@ -2,21 +2,6 @@
 #include <test_progs.h>
 #include "test_stacktrace_build_id.skel.h"
 
-static __u64 read_perf_max_sample_freq(void)
-{
-       __u64 sample_freq = 5000; /* fallback to 5000 on error */
-       FILE *f;
-       __u32 duration = 0;
-
-       f = fopen("/proc/sys/kernel/perf_event_max_sample_rate", "r");
-       if (f == NULL)
-               return sample_freq;
-       CHECK(fscanf(f, "%llu", &sample_freq) != 1, "Get max sample rate",
-                 "return default value: 5000,err %d\n", -errno);
-       fclose(f);
-       return sample_freq;
-}
-
 void test_stacktrace_build_id_nmi(void)
 {
        int control_map_fd, stackid_hmap_fd, stackmap_fd;
index 9695318e8132d79da1541cf9f08ee30ea6081361..9c3de39023f603f3869a049d5a58ebc2f435ea9b 100644 (file)
@@ -229,3 +229,23 @@ int bpf_test_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
 
        return bpf_prog_load(type, NULL, license, insns, insns_cnt, &opts);
 }
+
+__u64 read_perf_max_sample_freq(void)
+{
+       __u64 sample_freq = 5000; /* fallback to 5000 on error */
+       FILE *f;
+
+       f = fopen("/proc/sys/kernel/perf_event_max_sample_rate", "r");
+       if (f == NULL) {
+               printf("Failed to open /proc/sys/kernel/perf_event_max_sample_rate: err %d\n"
+                      "return default value: 5000\n", -errno);
+               return sample_freq;
+       }
+       if (fscanf(f, "%llu", &sample_freq) != 1) {
+               printf("Failed to parse /proc/sys/kernel/perf_event_max_sample_rate: err %d\n"
+                      "return default value: 5000\n", -errno);
+       }
+
+       fclose(f);
+       return sample_freq;
+}
index 6ec00bf79cb552cf0c3d489aa08b671ca45a9ff5..eb8790f928e4c0bbc9223520a9a5c3924b068ffc 100644 (file)
@@ -20,3 +20,5 @@ struct test_filter_set;
 int parse_test_list(const char *s,
                    struct test_filter_set *test_set,
                    bool is_glob_pattern);
+
+__u64 read_perf_max_sample_freq(void);