summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2019-07-15 15:22:57 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-07-29 17:34:41 -0400
commitaf4a0991f40a1e50e5caff0317f152df2c82bdeb (patch)
treeb04d1087a844ef4fb50d74119aa50f76f6085f23
parent2620b7e3696a9470c7cda0a08e55813fd5e57e5c (diff)
perf evsel: Store backpointer to attached bpf_object
We may want to get to this bpf_object, to search for other BPF programs, etc. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lkml.kernel.org/n/tip-3y8hrb6lszjfi23vjlic3cib@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/util/bpf-loader.c4
-rw-r--r--tools/perf/util/bpf-loader.h2
-rw-r--r--tools/perf/util/evsel.c1
-rw-r--r--tools/perf/util/evsel.h3
-rw-r--r--tools/perf/util/parse-events.c3
5 files changed, 9 insertions, 4 deletions
diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c
index c61974a50aa5..6d0dfb777a79 100644
--- a/tools/perf/util/bpf-loader.c
+++ b/tools/perf/util/bpf-loader.c
@@ -763,7 +763,7 @@ int bpf__foreach_event(struct bpf_object *obj,
763 763
764 if (priv->is_tp) { 764 if (priv->is_tp) {
765 fd = bpf_program__fd(prog); 765 fd = bpf_program__fd(prog);
766 err = (*func)(priv->sys_name, priv->evt_name, fd, arg); 766 err = (*func)(priv->sys_name, priv->evt_name, fd, obj, arg);
767 if (err) { 767 if (err) {
768 pr_debug("bpf: tracepoint call back failed, stop iterate\n"); 768 pr_debug("bpf: tracepoint call back failed, stop iterate\n");
769 return err; 769 return err;
@@ -788,7 +788,7 @@ int bpf__foreach_event(struct bpf_object *obj,
788 return fd; 788 return fd;
789 } 789 }
790 790
791 err = (*func)(tev->group, tev->event, fd, arg); 791 err = (*func)(tev->group, tev->event, fd, obj, arg);
792 if (err) { 792 if (err) {
793 pr_debug("bpf: call back failed, stop iterate\n"); 793 pr_debug("bpf: call back failed, stop iterate\n");
794 return err; 794 return err;
diff --git a/tools/perf/util/bpf-loader.h b/tools/perf/util/bpf-loader.h
index 3f46856e3330..8c3441a4b72c 100644
--- a/tools/perf/util/bpf-loader.h
+++ b/tools/perf/util/bpf-loader.h
@@ -46,7 +46,7 @@ struct parse_events_term;
46#define PERF_BPF_PROBE_GROUP "perf_bpf_probe" 46#define PERF_BPF_PROBE_GROUP "perf_bpf_probe"
47 47
48typedef int (*bpf_prog_iter_callback_t)(const char *group, const char *event, 48typedef int (*bpf_prog_iter_callback_t)(const char *group, const char *event,
49 int fd, void *arg); 49 int fd, struct bpf_object *obj, void *arg);
50 50
51#ifdef HAVE_LIBBPF_SUPPORT 51#ifdef HAVE_LIBBPF_SUPPORT
52struct bpf_object *bpf__prepare_load(const char *filename, bool source); 52struct bpf_object *bpf__prepare_load(const char *filename, bool source);
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 52459dd5ad0c..7d1757a2ec46 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -234,6 +234,7 @@ void perf_evsel__init(struct perf_evsel *evsel,
234 evsel->scale = 1.0; 234 evsel->scale = 1.0;
235 evsel->max_events = ULONG_MAX; 235 evsel->max_events = ULONG_MAX;
236 evsel->evlist = NULL; 236 evsel->evlist = NULL;
237 evsel->bpf_obj = NULL;
237 evsel->bpf_fd = -1; 238 evsel->bpf_fd = -1;
238 INIT_LIST_HEAD(&evsel->node); 239 INIT_LIST_HEAD(&evsel->node);
239 INIT_LIST_HEAD(&evsel->config_terms); 240 INIT_LIST_HEAD(&evsel->config_terms);
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index cad54e8ba522..b27935a6d36c 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -82,6 +82,8 @@ enum perf_tool_event {
82 PERF_TOOL_DURATION_TIME = 1, 82 PERF_TOOL_DURATION_TIME = 1,
83}; 83};
84 84
85struct bpf_object;
86
85/** struct perf_evsel - event selector 87/** struct perf_evsel - event selector
86 * 88 *
87 * @evlist - evlist this evsel is in, if it is in one. 89 * @evlist - evlist this evsel is in, if it is in one.
@@ -152,6 +154,7 @@ struct perf_evsel {
152 char *group_name; 154 char *group_name;
153 bool cmdline_group_boundary; 155 bool cmdline_group_boundary;
154 struct list_head config_terms; 156 struct list_head config_terms;
157 struct bpf_object *bpf_obj;
155 int bpf_fd; 158 int bpf_fd;
156 bool auto_merge_stats; 159 bool auto_merge_stats;
157 bool merged_stat; 160 bool merged_stat;
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index fac6b32ef94a..0540303e5e97 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -630,7 +630,7 @@ struct __add_bpf_event_param {
630 struct list_head *head_config; 630 struct list_head *head_config;
631}; 631};
632 632
633static int add_bpf_event(const char *group, const char *event, int fd, 633static int add_bpf_event(const char *group, const char *event, int fd, struct bpf_object *obj,
634 void *_param) 634 void *_param)
635{ 635{
636 LIST_HEAD(new_evsels); 636 LIST_HEAD(new_evsels);
@@ -672,6 +672,7 @@ static int add_bpf_event(const char *group, const char *event, int fd,
672 pr_debug("adding %s:%s to %p\n", 672 pr_debug("adding %s:%s to %p\n",
673 group, event, pos); 673 group, event, pos);
674 pos->bpf_fd = fd; 674 pos->bpf_fd = fd;
675 pos->bpf_obj = obj;
675 } 676 }
676 list_splice(&new_evsels, list); 677 list_splice(&new_evsels, list);
677 return 0; 678 return 0;