diff options
author | Alexei Starovoitov <ast@fb.com> | 2016-02-17 19:58:58 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-02-20 00:21:44 -0500 |
commit | d5a3b1f691865be576c2bffa708549b8cdccda19 (patch) | |
tree | 12f6009f168baee6889a0fde07d60ac3f5c12aac /kernel/trace | |
parent | 568b329a02f75ed3aaae5eb2cca384cb9e09cb29 (diff) | |
download | linux-d5a3b1f691865be576c2bffa708549b8cdccda19.tar.gz linux-d5a3b1f691865be576c2bffa708549b8cdccda19.tar.bz2 linux-d5a3b1f691865be576c2bffa708549b8cdccda19.zip |
bpf: introduce BPF_MAP_TYPE_STACK_TRACE
add new map type to store stack traces and corresponding helper
bpf_get_stackid(ctx, map, flags) - walk user or kernel stack and return id
@ctx: struct pt_regs*
@map: pointer to stack_trace map
@flags: bits 0-7 - numer of stack frames to skip
bit 8 - collect user stack instead of kernel
bit 9 - compare stacks by hash only
bit 10 - if two different stacks hash into the same stackid
discard old
other bits - reserved
Return: >= 0 stackid on success or negative error
stackid is a 32-bit integer handle that can be further combined with
other data (including other stackid) and used as a key into maps.
Userspace will access stackmap using standard lookup/delete syscall commands to
retrieve full stack trace for given stackid.
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/trace')
-rw-r--r-- | kernel/trace/bpf_trace.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 326a75e884db..4b8caa392b86 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -299,6 +299,8 @@ static const struct bpf_func_proto *kprobe_prog_func_proto(enum bpf_func_id func return &bpf_perf_event_read_proto; case BPF_FUNC_perf_event_output: return &bpf_perf_event_output_proto; + case BPF_FUNC_get_stackid: + return &bpf_get_stackid_proto; default: return NULL; } |