Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Wang Nan and committed by
Arnaldo Carvalho de Melo
cd102d70 8c619d6a

+18 -18
+4 -4
tools/perf/util/bpf-loader.c
··· 693 693 return 0; 694 694 } 695 695 696 - int bpf__foreach_tev(struct bpf_object *obj, 697 - bpf_prog_iter_callback_t func, 698 - void *arg) 696 + int bpf__foreach_event(struct bpf_object *obj, 697 + bpf_prog_iter_callback_t func, 698 + void *arg) 699 699 { 700 700 struct bpf_program *prog; 701 701 int err; ··· 728 728 return fd; 729 729 } 730 730 731 - err = (*func)(tev, fd, arg); 731 + err = (*func)(tev->group, tev->event, fd, arg); 732 732 if (err) { 733 733 pr_debug("bpf: call back failed, stop iterate\n"); 734 734 return err;
+6 -6
tools/perf/util/bpf-loader.h
··· 46 46 struct parse_events_term; 47 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 50 int fd, void *arg); 51 51 52 52 #ifdef HAVE_LIBBPF_SUPPORT ··· 67 67 int bpf__load(struct bpf_object *obj); 68 68 int bpf__strerror_load(struct bpf_object *obj, int err, 69 69 char *buf, size_t size); 70 - int bpf__foreach_tev(struct bpf_object *obj, 71 - bpf_prog_iter_callback_t func, void *arg); 70 + int bpf__foreach_event(struct bpf_object *obj, 71 + bpf_prog_iter_callback_t func, void *arg); 72 72 73 73 int bpf__config_obj(struct bpf_object *obj, struct parse_events_term *term, 74 74 struct perf_evlist *evlist, int *error_pos); ··· 107 107 static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; } 108 108 109 109 static inline int 110 - bpf__foreach_tev(struct bpf_object *obj __maybe_unused, 111 - bpf_prog_iter_callback_t func __maybe_unused, 112 - void *arg __maybe_unused) 110 + bpf__foreach_event(struct bpf_object *obj __maybe_unused, 111 + bpf_prog_iter_callback_t func __maybe_unused, 112 + void *arg __maybe_unused) 113 113 { 114 114 return 0; 115 115 }
+8 -8
tools/perf/util/parse-events.c
··· 584 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 588 void *_param) 589 589 { 590 590 LIST_HEAD(new_evsels); ··· 595 595 int err; 596 596 597 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, 601 - tev->event, evlist->error, 600 + err = parse_events_add_tracepoint(&new_evsels, &evlist->idx, group, 601 + event, evlist->error, 602 602 param->head_config); 603 603 if (err) { 604 604 struct perf_evsel *evsel, *tmp; 605 605 606 606 pr_debug("Failed to add BPF event %s:%s\n", 607 - tev->group, tev->event); 607 + group, event); 608 608 list_for_each_entry_safe(evsel, tmp, &new_evsels, node) { 609 609 list_del(&evsel->node); 610 610 perf_evsel__delete(evsel); 611 611 } 612 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 616 list_for_each_entry(pos, &new_evsels, node) { 617 617 pr_debug("adding %s:%s to %p\n", 618 - tev->group, tev->event, pos); 618 + group, event, pos); 619 619 pos->bpf_fd = fd; 620 620 } 621 621 list_splice(&new_evsels, list); ··· 661 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 665 if (err) { 666 666 snprintf(errbuf, sizeof(errbuf), 667 667 "Attach events in BPF object failed");