lkml.org 
[lkml]   [2015]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 13/31] perf tools: Attach eBPF program to perf event
    Date
    This is the final patch which makes basic BPF filter work. After
    applying this patch, users are allowed to use BPF filter like:

    # perf record --event ./hello_world.c ls

    In this patch PERF_EVENT_IOC_SET_BPF ioctl is used to attach eBPF
    program to a newly created perf event. The file descriptor of the
    eBPF program is passed to perf record using previous patches, and
    stored into evsel->bpf_fd.

    It is possible that different perf event are created for one kprobe
    events for different CPUs. In this case, when trying to call the
    ioctl, EEXIST will be return. This patch doesn't treat it as an error.

    Signed-off-by: Wang Nan <wangnan0@huawei.com>
    Cc: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kaixu Xia <xiakaixu@huawei.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Link: http://lkml.kernel.org/n/1436445342-1402-26-git-send-email-wangnan0@huawei.com
    ---
    tools/perf/util/evsel.c | 16 ++++++++++++++++
    1 file changed, 16 insertions(+)

    diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
    index 6fff961..5f59841 100644
    --- a/tools/perf/util/evsel.c
    +++ b/tools/perf/util/evsel.c
    @@ -1365,6 +1365,22 @@ retry_open:
    err);
    goto try_fallback;
    }
    +
    + if (evsel->bpf_fd >= 0) {
    + int evt_fd = FD(evsel, cpu, thread);
    + int bpf_fd = evsel->bpf_fd;
    +
    + err = ioctl(evt_fd,
    + PERF_EVENT_IOC_SET_BPF,
    + bpf_fd);
    + if (err && errno != EEXIST) {
    + pr_err("failed to attach bpf fd %d: %s\n",
    + bpf_fd, strerror(errno));
    + err = -EINVAL;
    + goto out_close;
    + }
    + }
    +
    set_rlimit = NO_CHANGE;

    /*
    --
    2.1.0


    \
     
     \ /
      Last update: 2015-08-29 07:21    [W:3.212 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site