perf bpf_counter: Move common functions to bpf_counter.h
authorNamhyung Kim <namhyung@kernel.org>
Fri, 25 Jun 2021 07:18:25 +0000 (00:18 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 1 Jul 2021 19:14:19 +0000 (16:14 -0300)
Some helper functions will be used for cgroup counting too.  Move them
to a header file for sharing.

Committer notes:

Fix the build on older systems with:

  -       struct bpf_map_info map_info = {0};
  +       struct bpf_map_info map_info = { .id = 0, };

This wasn't breaking the build in such systems as bpf_counter.c isn't
built due to:

tools/perf/util/Build:

  perf-$(CONFIG_PERF_BPF_SKEL) += bpf_counter.o

The bpf_counter.h file on the other hand is included from places that
are built everywhere.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Song Liu <songliubraving@fb.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20210625071826.608504-4-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/bpf_counter.c
tools/perf/util/bpf_counter.h

index 5ed674a2f55e8f45d728227e0eadef7274c00a14..21c8e71162b1385813a36f222325bb95e6a52e37 100644 (file)
@@ -7,12 +7,8 @@
 #include <unistd.h>
 #include <sys/file.h>
 #include <sys/time.h>
-#include <sys/resource.h>
 #include <linux/err.h>
 #include <linux/zalloc.h>
-#include <bpf/bpf.h>
-#include <bpf/btf.h>
-#include <bpf/libbpf.h>
 #include <api/fs/fs.h>
 #include <perf/bpf_perf.h>
 
@@ -37,13 +33,6 @@ static inline void *u64_to_ptr(__u64 ptr)
        return (void *)(unsigned long)ptr;
 }
 
-static void set_max_rlimit(void)
-{
-       struct rlimit rinf = { RLIM_INFINITY, RLIM_INFINITY };
-
-       setrlimit(RLIMIT_MEMLOCK, &rinf);
-}
-
 static struct bpf_counter *bpf_counter_alloc(void)
 {
        struct bpf_counter *counter;
@@ -297,33 +286,6 @@ struct bpf_counter_ops bpf_program_profiler_ops = {
        .install_pe = bpf_program_profiler__install_pe,
 };
 
-static __u32 bpf_link_get_id(int fd)
-{
-       struct bpf_link_info link_info = {0};
-       __u32 link_info_len = sizeof(link_info);
-
-       bpf_obj_get_info_by_fd(fd, &link_info, &link_info_len);
-       return link_info.id;
-}
-
-static __u32 bpf_link_get_prog_id(int fd)
-{
-       struct bpf_link_info link_info = {0};
-       __u32 link_info_len = sizeof(link_info);
-
-       bpf_obj_get_info_by_fd(fd, &link_info, &link_info_len);
-       return link_info.prog_id;
-}
-
-static __u32 bpf_map_get_id(int fd)
-{
-       struct bpf_map_info map_info = {0};
-       __u32 map_info_len = sizeof(map_info);
-
-       bpf_obj_get_info_by_fd(fd, &map_info, &map_info_len);
-       return map_info.id;
-}
-
 static bool bperf_attr_map_compatible(int attr_map_fd)
 {
        struct bpf_map_info map_info = {0};
@@ -385,20 +347,6 @@ static int bperf_lock_attr_map(struct target *target)
        return map_fd;
 }
 
-/* trigger the leader program on a cpu */
-static int bperf_trigger_reading(int prog_fd, int cpu)
-{
-       DECLARE_LIBBPF_OPTS(bpf_test_run_opts, opts,
-                           .ctx_in = NULL,
-                           .ctx_size_in = 0,
-                           .flags = BPF_F_TEST_RUN_ON_CPU,
-                           .cpu = cpu,
-                           .retval = 0,
-               );
-
-       return bpf_prog_test_run_opts(prog_fd, &opts);
-}
-
 static int bperf_check_target(struct evsel *evsel,
                              struct target *target,
                              enum bperf_filter_type *filter_type,
index d6d907c3dcf9281afee0f6dc5ad3a88aacfce865..65ebaa6694fbd2c15778713940e18eddc6280dc6 100644 (file)
@@ -3,6 +3,10 @@
 #define __PERF_BPF_COUNTER_H 1
 
 #include <linux/list.h>
+#include <sys/resource.h>
+#include <bpf/bpf.h>
+#include <bpf/btf.h>
+#include <bpf/libbpf.h>
 
 struct evsel;
 struct target;
@@ -76,4 +80,52 @@ static inline int bpf_counter__install_pe(struct evsel *evsel __maybe_unused,
 
 #endif /* HAVE_BPF_SKEL */
 
+static inline void set_max_rlimit(void)
+{
+       struct rlimit rinf = { RLIM_INFINITY, RLIM_INFINITY };
+
+       setrlimit(RLIMIT_MEMLOCK, &rinf);
+}
+
+static inline __u32 bpf_link_get_id(int fd)
+{
+       struct bpf_link_info link_info = { .id = 0, };
+       __u32 link_info_len = sizeof(link_info);
+
+       bpf_obj_get_info_by_fd(fd, &link_info, &link_info_len);
+       return link_info.id;
+}
+
+static inline __u32 bpf_link_get_prog_id(int fd)
+{
+       struct bpf_link_info link_info = { .id = 0, };
+       __u32 link_info_len = sizeof(link_info);
+
+       bpf_obj_get_info_by_fd(fd, &link_info, &link_info_len);
+       return link_info.prog_id;
+}
+
+static inline __u32 bpf_map_get_id(int fd)
+{
+       struct bpf_map_info map_info = { .id = 0, };
+       __u32 map_info_len = sizeof(map_info);
+
+       bpf_obj_get_info_by_fd(fd, &map_info, &map_info_len);
+       return map_info.id;
+}
+
+/* trigger the leader program on a cpu */
+static inline int bperf_trigger_reading(int prog_fd, int cpu)
+{
+       DECLARE_LIBBPF_OPTS(bpf_test_run_opts, opts,
+                           .ctx_in = NULL,
+                           .ctx_size_in = 0,
+                           .flags = BPF_F_TEST_RUN_ON_CPU,
+                           .cpu = cpu,
+                           .retval = 0,
+               );
+
+       return bpf_prog_test_run_opts(prog_fd, &opts);
+}
+
 #endif /* __PERF_BPF_COUNTER_H */