diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-10-30 10:09:37 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-10-30 10:09:37 +0100 |
commit | bebd23a2ed31d47e7dd746d3b125068aa2c42d85 (patch) | |
tree | 81cc1a59203c393286dba3e76daa343f5c35b127 /tools/perf/tests | |
parent | 66a565c203bc31b76969711fbd92da11bee2f129 (diff) | |
parent | 7ed4915ad60788d6b846e2cd034f49ee15698143 (diff) | |
download | linux-next-bebd23a2ed31d47e7dd746d3b125068aa2c42d85.tar.gz |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
New features:
- Allow passing C language eBPF scriptlets via --event in all tools,
so that it gets built using clang and then pass it to the kernel via
sys_bpf(). (Wang Nan)
- Wire up the loaded ebpf object file with associated kprobes, so that
it can determine if the kprobes will be filtered or not. (Wang Nan)
User visible changes:
- Add cmd string table to decode sys_bpf first arg in 'trace'. (Arnaldo Carvalho de Melo)
- Enable printing of branch stack in 'perf script'. (Stephane Eranian)
- Pass the right file with debug info to libunwind. (Rabin Vincent)
Build Fixes:
- Make sure fixdep is built before libbpf, fixing a race. (Jiri Olsa)
- Fix libiberty feature detection. (Rabin Vincent)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/tests')
-rw-r--r-- | tools/perf/tests/bpf-script-example.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/perf/tests/bpf-script-example.c b/tools/perf/tests/bpf-script-example.c new file mode 100644 index 000000000000..410a70b93b93 --- /dev/null +++ b/tools/perf/tests/bpf-script-example.c @@ -0,0 +1,44 @@ +#ifndef LINUX_VERSION_CODE +# error Need LINUX_VERSION_CODE +# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig' +#endif +#define BPF_ANY 0 +#define BPF_MAP_TYPE_ARRAY 2 +#define BPF_FUNC_map_lookup_elem 1 +#define BPF_FUNC_map_update_elem 2 + +static void *(*bpf_map_lookup_elem)(void *map, void *key) = + (void *) BPF_FUNC_map_lookup_elem; +static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) = + (void *) BPF_FUNC_map_update_elem; + +struct bpf_map_def { + unsigned int type; + unsigned int key_size; + unsigned int value_size; + unsigned int max_entries; +}; + +#define SEC(NAME) __attribute__((section(NAME), used)) +struct bpf_map_def SEC("maps") flip_table = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(int), + .value_size = sizeof(int), + .max_entries = 1, +}; + +SEC("func=sys_epoll_pwait") +int bpf_func__sys_epoll_pwait(void *ctx) +{ + int ind =0; + int *flag = bpf_map_lookup_elem(&flip_table, &ind); + int new_flag; + if (!flag) + return 0; + /* flip flag and store back */ + new_flag = !*flag; + bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY); + return new_flag; +} +char _license[] SEC("license") = "GPL"; +int _version SEC("version") = LINUX_VERSION_CODE; |