diff options
author | Wang Nan <wangnan0@huawei.com> | 2016-07-13 06:44:04 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-07-13 22:09:03 -0400 |
commit | cd102d70fe957b060b9df6bc4f54684de3fe00cd (patch) | |
tree | b8743f75355d1682f4e90c0aa5425a0037d42e6b | |
parent | 8c619d6a333f98087816e64c62f0f2389e19ab4a (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.c | 8 | ||||
-rw-r--r-- | tools/perf/util/bpf-loader.h | 12 | ||||
-rw-r--r-- | tools/perf/util/parse-events.c | 16 |
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 | ||
696 | int bpf__foreach_tev(struct bpf_object *obj, | 696 | int 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; | |||
46 | struct parse_events_term; | 46 | struct parse_events_term; |
47 | #define PERF_BPF_PROBE_GROUP "perf_bpf_probe" | 47 | #define PERF_BPF_PROBE_GROUP "perf_bpf_probe" |
48 | 48 | ||
49 | typedef int (*bpf_prog_iter_callback_t)(struct probe_trace_event *tev, | 49 | typedef 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, | |||
67 | int bpf__load(struct bpf_object *obj); | 67 | int bpf__load(struct bpf_object *obj); |
68 | int bpf__strerror_load(struct bpf_object *obj, int err, | 68 | int bpf__strerror_load(struct bpf_object *obj, int err, |
69 | char *buf, size_t size); | 69 | char *buf, size_t size); |
70 | int bpf__foreach_tev(struct bpf_object *obj, | 70 | int 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 | ||
73 | int bpf__config_obj(struct bpf_object *obj, struct parse_events_term *term, | 73 | int 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 | |||
107 | static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; } | 107 | static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; } |
108 | 108 | ||
109 | static inline int | 109 | static inline int |
110 | bpf__foreach_tev(struct bpf_object *obj __maybe_unused, | 110 | bpf__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 | ||
587 | static int add_bpf_event(struct probe_trace_event *tev, int fd, | 587 | static 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, ¶m); | 664 | err = bpf__foreach_event(obj, add_bpf_event, ¶m); |
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"); |