lkml.org 
[lkml]   [2015]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v8 33/49] perf record: Load all eBPF object into kernel
    Date
    This patch utilizes bpf_load_object() provided by libbpf to load all
    objects into kernel.

    Signed-off-by: Wang Nan <wangnan0@huawei.com>
    ---
    tools/perf/builtin-record.c | 12 ++++++++++++
    tools/perf/util/bpf-loader.c | 19 +++++++++++++++++++
    tools/perf/util/bpf-loader.h | 2 ++
    3 files changed, 33 insertions(+)

    diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
    index 28ceae8..8ade056 100644
    --- a/tools/perf/builtin-record.c
    +++ b/tools/perf/builtin-record.c
    @@ -1126,6 +1126,18 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
    goto out_symbol_exit;
    }

    + /*
    + * bpf__probe() also calls symbol__init() if there are probe
    + * events in bpf objects, so calling symbol_exit when failuer
    + * is safe. If there is no probe event, bpf__load() always
    + * success.
    + */
    + err = bpf__load();
    + if (err) {
    + pr_err("Loading BPF programs failed\n");
    + goto out_symbol_exit;
    + }
    +
    symbol__init(NULL);

    if (symbol_conf.kptr_restrict)
    diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c
    index cb11561..54bda7e 100644
    --- a/tools/perf/util/bpf-loader.c
    +++ b/tools/perf/util/bpf-loader.c
    @@ -239,3 +239,22 @@ int bpf__probe(void)

    return err < 0 ? err : 0;
    }
    +
    +int bpf__load(void)
    +{
    + struct bpf_object *obj, *tmp;
    + int err = 0;
    +
    + bpf_object__for_each(obj, tmp) {
    + err = bpf_object__load(obj);
    + if (err) {
    + pr_err("bpf: load objects failed\n");
    + goto errout;
    + }
    + }
    + return 0;
    +errout:
    + bpf_object__for_each(obj, tmp)
    + bpf_object__unload(obj);
    + return err;
    +}
    diff --git a/tools/perf/util/bpf-loader.h b/tools/perf/util/bpf-loader.h
    index 374aec0..ae0dc9b 100644
    --- a/tools/perf/util/bpf-loader.h
    +++ b/tools/perf/util/bpf-loader.h
    @@ -14,6 +14,7 @@
    int bpf__prepare_load(const char *filename, bool source);
    int bpf__probe(void);
    int bpf__unprobe(void);
    +int bpf__load(void);

    void bpf__clear(void);
    #else
    @@ -26,6 +27,7 @@ static inline int bpf__prepare_load(const char *filename __maybe_unused,

    static inline int bpf__probe(void) { return 0; }
    static inline int bpf__unprobe(void) { return 0; }
    +static inline int bpf__load(void) { return 0; }
    static inline void bpf__clear(void) { }
    #endif
    #endif
    --
    1.8.3.4


    \
     
     \ /
      Last update: 2015-06-24 15:01    [W:5.405 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site