bpf: introduce BPF_MAP_TYPE_STACK_TRACE
authorAlexei Starovoitov <ast@fb.com>
Thu, 18 Feb 2016 03:58:58 +0000 (19:58 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 20 Feb 2016 05:21:44 +0000 (00:21 -0500)
commitd5a3b1f691865be576c2bffa708549b8cdccda19
tree12f6009f168baee6889a0fde07d60ac3f5c12aac
parent568b329a02f75ed3aaae5eb2cca384cb9e09cb29
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>
include/linux/bpf.h
include/uapi/linux/bpf.h
kernel/bpf/Makefile
kernel/bpf/stackmap.c [new file with mode: 0644]
kernel/bpf/verifier.c
kernel/trace/bpf_trace.c