diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-06-03 11:36:39 -0400 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-06-06 17:19:34 -0400 |
| commit | be834ffbd15ea9d73ba96fdbdcb1012add7e3bdf (patch) | |
| tree | 36a00d108c3d86f8b544d177539e393ea35a7f64 | |
| parent | a7fe0450b0142d0eb4a543840a43e22682debf25 (diff) | |
tools lib bpf: Make bpf_program__get_private() use IS_ERR()
For consistency with bpf_map__priv() and elsewhere.
Acked-by: Wang Nan <wangnan0@huawei.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Milian Wolff <milian.wolff@kdab.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/n/tip-x17nk5mrazkf45z0l0ahlmo8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 5 | ||||
| -rw-r--r-- | tools/lib/bpf/libbpf.h | 3 | ||||
| -rw-r--r-- | tools/perf/util/bpf-loader.c | 27 |
3 files changed, 15 insertions, 20 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 0412182fb365..7eb7fb26e999 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c | |||
| @@ -1230,10 +1230,9 @@ int bpf_program__set_private(struct bpf_program *prog, | |||
| 1230 | return 0; | 1230 | return 0; |
| 1231 | } | 1231 | } |
| 1232 | 1232 | ||
| 1233 | int bpf_program__get_private(struct bpf_program *prog, void **ppriv) | 1233 | void *bpf_program__priv(struct bpf_program *prog) |
| 1234 | { | 1234 | { |
| 1235 | *ppriv = prog->priv; | 1235 | return prog ? prog->priv : ERR_PTR(-EINVAL); |
| 1236 | return 0; | ||
| 1237 | } | 1236 | } |
| 1238 | 1237 | ||
| 1239 | const char *bpf_program__title(struct bpf_program *prog, bool needs_copy) | 1238 | const char *bpf_program__title(struct bpf_program *prog, bool needs_copy) |
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index ea65775e8302..372cecbde207 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h | |||
| @@ -81,8 +81,7 @@ typedef void (*bpf_program_clear_priv_t)(struct bpf_program *, | |||
| 81 | int bpf_program__set_private(struct bpf_program *prog, void *priv, | 81 | int bpf_program__set_private(struct bpf_program *prog, void *priv, |
| 82 | bpf_program_clear_priv_t clear_priv); | 82 | bpf_program_clear_priv_t clear_priv); |
| 83 | 83 | ||
| 84 | int bpf_program__get_private(struct bpf_program *prog, | 84 | void *bpf_program__priv(struct bpf_program *prog); |
| 85 | void **ppriv); | ||
| 86 | 85 | ||
| 87 | const char *bpf_program__title(struct bpf_program *prog, bool needs_copy); | 86 | const char *bpf_program__title(struct bpf_program *prog, bool needs_copy); |
| 88 | 87 | ||
diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c index c19010e6cefb..1907d5313960 100644 --- a/tools/perf/util/bpf-loader.c +++ b/tools/perf/util/bpf-loader.c | |||
| @@ -380,15 +380,14 @@ preproc_gen_prologue(struct bpf_program *prog, int n, | |||
| 380 | struct bpf_insn *orig_insns, int orig_insns_cnt, | 380 | struct bpf_insn *orig_insns, int orig_insns_cnt, |
| 381 | struct bpf_prog_prep_result *res) | 381 | struct bpf_prog_prep_result *res) |
| 382 | { | 382 | { |
| 383 | struct bpf_prog_priv *priv = bpf_program__priv(prog); | ||
| 383 | struct probe_trace_event *tev; | 384 | struct probe_trace_event *tev; |
| 384 | struct perf_probe_event *pev; | 385 | struct perf_probe_event *pev; |
| 385 | struct bpf_prog_priv *priv; | ||
| 386 | struct bpf_insn *buf; | 386 | struct bpf_insn *buf; |
| 387 | size_t prologue_cnt = 0; | 387 | size_t prologue_cnt = 0; |
| 388 | int i, err; | 388 | int i, err; |
| 389 | 389 | ||
| 390 | err = bpf_program__get_private(prog, (void **)&priv); | 390 | if (IS_ERR(priv) || !priv) |
| 391 | if (err || !priv) | ||
| 392 | goto errout; | 391 | goto errout; |
| 393 | 392 | ||
| 394 | pev = &priv->pev; | 393 | pev = &priv->pev; |
| @@ -535,13 +534,12 @@ static int map_prologue(struct perf_probe_event *pev, int *mapping, | |||
| 535 | 534 | ||
| 536 | static int hook_load_preprocessor(struct bpf_program *prog) | 535 | static int hook_load_preprocessor(struct bpf_program *prog) |
| 537 | { | 536 | { |
| 537 | struct bpf_prog_priv *priv = bpf_program__priv(prog); | ||
| 538 | struct perf_probe_event *pev; | 538 | struct perf_probe_event *pev; |
| 539 | struct bpf_prog_priv *priv; | ||
| 540 | bool need_prologue = false; | 539 | bool need_prologue = false; |
| 541 | int err, i; | 540 | int err, i; |
| 542 | 541 | ||
| 543 | err = bpf_program__get_private(prog, (void **)&priv); | 542 | if (IS_ERR(priv) || !priv) { |
| 544 | if (err || !priv) { | ||
| 545 | pr_debug("Internal error when hook preprocessor\n"); | 543 | pr_debug("Internal error when hook preprocessor\n"); |
| 546 | return -BPF_LOADER_ERRNO__INTERNAL; | 544 | return -BPF_LOADER_ERRNO__INTERNAL; |
| 547 | } | 545 | } |
| @@ -607,9 +605,11 @@ int bpf__probe(struct bpf_object *obj) | |||
| 607 | if (err) | 605 | if (err) |
| 608 | goto out; | 606 | goto out; |
| 609 | 607 | ||
| 610 | err = bpf_program__get_private(prog, (void **)&priv); | 608 | priv = bpf_program__priv(prog); |
| 611 | if (err || !priv) | 609 | if (IS_ERR(priv) || !priv) { |
| 610 | err = PTR_ERR(priv); | ||
| 612 | goto out; | 611 | goto out; |
| 612 | } | ||
| 613 | pev = &priv->pev; | 613 | pev = &priv->pev; |
| 614 | 614 | ||
| 615 | err = convert_perf_probe_events(pev, 1); | 615 | err = convert_perf_probe_events(pev, 1); |
| @@ -645,13 +645,12 @@ int bpf__unprobe(struct bpf_object *obj) | |||
| 645 | { | 645 | { |
| 646 | int err, ret = 0; | 646 | int err, ret = 0; |
| 647 | struct bpf_program *prog; | 647 | struct bpf_program *prog; |
| 648 | struct bpf_prog_priv *priv; | ||
| 649 | 648 | ||
| 650 | bpf_object__for_each_program(prog, obj) { | 649 | bpf_object__for_each_program(prog, obj) { |
| 650 | struct bpf_prog_priv *priv = bpf_program__priv(prog); | ||
| 651 | int i; | 651 | int i; |
| 652 | 652 | ||
| 653 | err = bpf_program__get_private(prog, (void **)&priv); | 653 | if (IS_ERR(priv) || !priv) |
| 654 | if (err || !priv) | ||
| 655 | continue; | 654 | continue; |
| 656 | 655 | ||
| 657 | for (i = 0; i < priv->pev.ntevs; i++) { | 656 | for (i = 0; i < priv->pev.ntevs; i++) { |
| @@ -702,14 +701,12 @@ int bpf__foreach_tev(struct bpf_object *obj, | |||
| 702 | int err; | 701 | int err; |
| 703 | 702 | ||
| 704 | bpf_object__for_each_program(prog, obj) { | 703 | bpf_object__for_each_program(prog, obj) { |
| 704 | struct bpf_prog_priv *priv = bpf_program__priv(prog); | ||
| 705 | struct probe_trace_event *tev; | 705 | struct probe_trace_event *tev; |
| 706 | struct perf_probe_event *pev; | 706 | struct perf_probe_event *pev; |
| 707 | struct bpf_prog_priv *priv; | ||
| 708 | int i, fd; | 707 | int i, fd; |
| 709 | 708 | ||
| 710 | err = bpf_program__get_private(prog, | 709 | if (IS_ERR(priv) || !priv) { |
| 711 | (void **)&priv); | ||
| 712 | if (err || !priv) { | ||
| 713 | pr_debug("bpf: failed to get private field\n"); | 710 | pr_debug("bpf: failed to get private field\n"); |
| 714 | return -BPF_LOADER_ERRNO__INTERNAL; | 711 | return -BPF_LOADER_ERRNO__INTERNAL; |
| 715 | } | 712 | } |
