aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWang Nan <wangnan0@huawei.com>2016-07-13 06:44:04 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-07-13 22:09:03 -0400
commitcd102d70fe957b060b9df6bc4f54684de3fe00cd (patch)
treeb8743f75355d1682f4e90c0aa5425a0037d42e6b
parent8c619d6a333f98087816e64c62f0f2389e19ab4a (diff)
perf bpf: Rename bpf__foreach_tev() to bpf__foreach_event()
Following commit will allow BPF script attach to tracepoints. bpf__foreach_tev() will iterate over all events, not only kprobes. Rename it to bpf__foreach_event(). Since only group and event are used by caller, there's no need to pass full 'struct probe_trace_event' to bpf_prog_iter_callback_t. Pass only these two strings. After this patch bpf_prog_iter_callback_t natually support tracepoints. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1468406646-21642-5-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/util/bpf-loader.c8
-rw-r--r--tools/perf/util/bpf-loader.h12
-rw-r--r--tools/perf/util/parse-events.c16
3 files changed, 18 insertions, 18 deletions
diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c
index 8445e89621fe..f22701497112 100644
--- a/tools/perf/util/bpf-loader.c
+++ b/tools/perf/util/bpf-loader.c
@@ -693,9 +693,9 @@ int bpf__load(struct bpf_object *obj)
693 return 0; 693 return 0;
694} 694}
695 695
696int bpf__foreach_tev(struct bpf_object *obj, 696int bpf__foreach_event(struct bpf_object *obj,
697 bpf_prog_iter_callback_t func, 697 bpf_prog_iter_callback_t func,
698 void *arg) 698 void *arg)
699{ 699{
700 struct bpf_program *prog; 700 struct bpf_program *prog;
701 int err; 701 int err;
@@ -728,7 +728,7 @@ int bpf__foreach_tev(struct bpf_object *obj,
728 return fd; 728 return fd;
729 } 729 }
730 730
731 err = (*func)(tev, fd, arg); 731 err = (*func)(tev->group, tev->event, fd, arg);
732 if (err) { 732 if (err) {
733 pr_debug("bpf: call back failed, stop iterate\n"); 733 pr_debug("bpf: call back failed, stop iterate\n");
734 return err; 734 return err;
diff --git a/tools/perf/util/bpf-loader.h b/tools/perf/util/bpf-loader.h
index 941e17275aa7..f2b737b225f2 100644
--- a/tools/perf/util/bpf-loader.h
+++ b/tools/perf/util/bpf-loader.h
@@ -46,7 +46,7 @@ struct bpf_object;
46struct parse_events_term; 46struct parse_events_term;
47#define PERF_BPF_PROBE_GROUP "perf_bpf_probe" 47#define PERF_BPF_PROBE_GROUP "perf_bpf_probe"
48 48
49typedef int (*bpf_prog_iter_callback_t)(struct probe_trace_event *tev, 49typedef int (*bpf_prog_iter_callback_t)(const char *group, const char *event,
50 int fd, void *arg); 50 int fd, void *arg);
51 51
52#ifdef HAVE_LIBBPF_SUPPORT 52#ifdef HAVE_LIBBPF_SUPPORT
@@ -67,8 +67,8 @@ int bpf__strerror_probe(struct bpf_object *obj, int err,
67int bpf__load(struct bpf_object *obj); 67int bpf__load(struct bpf_object *obj);
68int bpf__strerror_load(struct bpf_object *obj, int err, 68int bpf__strerror_load(struct bpf_object *obj, int err,
69 char *buf, size_t size); 69 char *buf, size_t size);
70int bpf__foreach_tev(struct bpf_object *obj, 70int bpf__foreach_event(struct bpf_object *obj,
71 bpf_prog_iter_callback_t func, void *arg); 71 bpf_prog_iter_callback_t func, void *arg);
72 72
73int bpf__config_obj(struct bpf_object *obj, struct parse_events_term *term, 73int bpf__config_obj(struct bpf_object *obj, struct parse_events_term *term,
74 struct perf_evlist *evlist, int *error_pos); 74 struct perf_evlist *evlist, int *error_pos);
@@ -107,9 +107,9 @@ static inline int bpf__unprobe(struct bpf_object *obj __maybe_unused) { return 0
107static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; } 107static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; }
108 108
109static inline int 109static inline int
110bpf__foreach_tev(struct bpf_object *obj __maybe_unused, 110bpf__foreach_event(struct bpf_object *obj __maybe_unused,
111 bpf_prog_iter_callback_t func __maybe_unused, 111 bpf_prog_iter_callback_t func __maybe_unused,
112 void *arg __maybe_unused) 112 void *arg __maybe_unused)
113{ 113{
114 return 0; 114 return 0;
115} 115}
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d866824f2b42..6b4fff375d99 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -584,7 +584,7 @@ struct __add_bpf_event_param {
584 struct list_head *head_config; 584 struct list_head *head_config;
585}; 585};
586 586
587static int add_bpf_event(struct probe_trace_event *tev, int fd, 587static int add_bpf_event(const char *group, const char *event, int fd,
588 void *_param) 588 void *_param)
589{ 589{
590 LIST_HEAD(new_evsels); 590 LIST_HEAD(new_evsels);
@@ -595,27 +595,27 @@ static int add_bpf_event(struct probe_trace_event *tev, int fd,
595 int err; 595 int err;
596 596
597 pr_debug("add bpf event %s:%s and attach bpf program %d\n", 597 pr_debug("add bpf event %s:%s and attach bpf program %d\n",
598 tev->group, tev->event, fd); 598 group, event, fd);
599 599
600 err = parse_events_add_tracepoint(&new_evsels, &evlist->idx, tev->group, 600 err = parse_events_add_tracepoint(&new_evsels, &evlist->idx, group,
601 tev->event, evlist->error, 601 event, evlist->error,
602 param->head_config); 602 param->head_config);
603 if (err) { 603 if (err) {
604 struct perf_evsel *evsel, *tmp; 604 struct perf_evsel *evsel, *tmp;
605 605
606 pr_debug("Failed to add BPF event %s:%s\n", 606 pr_debug("Failed to add BPF event %s:%s\n",
607 tev->group, tev->event); 607 group, event);
608 list_for_each_entry_safe(evsel, tmp, &new_evsels, node) { 608 list_for_each_entry_safe(evsel, tmp, &new_evsels, node) {
609 list_del(&evsel->node); 609 list_del(&evsel->node);
610 perf_evsel__delete(evsel); 610 perf_evsel__delete(evsel);
611 } 611 }
612 return err; 612 return err;
613 } 613 }
614 pr_debug("adding %s:%s\n", tev->group, tev->event); 614 pr_debug("adding %s:%s\n", group, event);
615 615
616 list_for_each_entry(pos, &new_evsels, node) { 616 list_for_each_entry(pos, &new_evsels, node) {
617 pr_debug("adding %s:%s to %p\n", 617 pr_debug("adding %s:%s to %p\n",
618 tev->group, tev->event, pos); 618 group, event, pos);
619 pos->bpf_fd = fd; 619 pos->bpf_fd = fd;
620 } 620 }
621 list_splice(&new_evsels, list); 621 list_splice(&new_evsels, list);
@@ -661,7 +661,7 @@ int parse_events_load_bpf_obj(struct parse_events_evlist *data,
661 goto errout; 661 goto errout;
662 } 662 }
663 663
664 err = bpf__foreach_tev(obj, add_bpf_event, &param); 664 err = bpf__foreach_event(obj, add_bpf_event, &param);
665 if (err) { 665 if (err) {
666 snprintf(errbuf, sizeof(errbuf), 666 snprintf(errbuf, sizeof(errbuf),
667 "Attach events in BPF object failed"); 667 "Attach events in BPF object failed");