Messages in this thread Patch in this message | | | Date | Thu, 15 Oct 2015 00:48:42 +0900 | From | Namhyung Kim <> | Subject | Re: [PATCH 10/31] perf test: Enforce LLVM test for BPF test |
| |
On Wed, Oct 14, 2015 at 12:41:21PM +0000, Wang Nan wrote: > This patch replaces the original toy BPF program with previous introduced > bpf-script-example.c. Dynamically embedded it into 'llvm-src.c'. > > The newly introduced BPF program attaches a BPF program at > 'sys_epoll_pwait()', and collect half samples from it. perf itself never > use that syscall, so further test can verify their result with it. > > Since BPF program require LINUX_VERSION_CODE of runtime kernel, this > patch computes that code from uname. > > Since the resuling BPF object is useful for further testcases, this patch > introduces 'prepare' and 'cleanup' method to tests, and makes test__llvm() > create a MAP_SHARED memory array to hold the resulting object. > > Signed-off-by: He Kuang <hekuang@huawei.com> > Signed-off-by: Wang Nan <wangnan0@huawei.com> > Cc: Arnaldo Carvalho de Melo <acme@redhat.com> > Cc: Alexei Starovoitov <ast@plumgrid.com> > Cc: Brendan Gregg <brendan.d.gregg@gmail.com> > Cc: Daniel Borkmann <daniel@iogearbox.net> > Cc: David Ahern <dsahern@gmail.com> > Cc: Jiri Olsa <jolsa@kernel.org> > Cc: Kaixu Xia <xiakaixu@huawei.com> > Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> > Cc: Namhyung Kim <namhyung@kernel.org> > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> > Cc: Zefan Li <lizefan@huawei.com> > Cc: pi3orama@163.com > Link: http://lkml.kernel.org/n/ebpf-6yw9eg0ej3l4jnqhinngkw86@git.kernel.org > ---
[SNIP]
> +void test__llvm_prepare(void) > +{ > + p_test_llvm__bpf_result = mmap(NULL, SHARED_BUF_INIT_SIZE, > + PROT_READ | PROT_WRITE, > + MAP_SHARED | MAP_ANONYMOUS, -1, 0); > + if (!p_test_llvm__bpf_result)
It should check MAP_FAILED instead.
> + return; > + memset((void *)p_test_llvm__bpf_result, '\0', SHARED_BUF_INIT_SIZE); > +} > + > +void test__llvm_cleanup(void) > +{ > + unsigned long boundary, buf_end; > + > + if (!p_test_llvm__bpf_result)
Ditto.
Thanks, Namhyung
> + return; > + if (p_test_llvm__bpf_result->size == 0) { > + munmap((void *)p_test_llvm__bpf_result, SHARED_BUF_INIT_SIZE); > + p_test_llvm__bpf_result = NULL; > + return; > + } > + > + buf_end = (unsigned long)p_test_llvm__bpf_result + SHARED_BUF_INIT_SIZE; > + > + boundary = (unsigned long)(p_test_llvm__bpf_result); > + boundary += p_test_llvm__bpf_result->size; > + boundary = (boundary + (page_size - 1)) & > + (~((unsigned long)page_size - 1)); > + munmap((void *)boundary, buf_end - boundary); > +} > diff --git a/tools/perf/tests/llvm.h b/tools/perf/tests/llvm.h > new file mode 100644 > index 0000000..1e89e46 > --- /dev/null > +++ b/tools/perf/tests/llvm.h > @@ -0,0 +1,14 @@ > +#ifndef PERF_TEST_LLVM_H > +#define PERF_TEST_LLVM_H > + > +#include <stddef.h> /* for size_t */ > + > +struct test_llvm__bpf_result { > + size_t size; > + char object[]; > +}; > + > +extern struct test_llvm__bpf_result *p_test_llvm__bpf_result; > +extern const char test_llvm__bpf_prog[]; > + > +#endif > diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h > index c804869..a848802 100644 > --- a/tools/perf/tests/tests.h > +++ b/tools/perf/tests/tests.h > @@ -27,6 +27,8 @@ enum { > struct test { > const char *desc; > int (*func)(void); > + void (*prepare)(void); > + void (*cleanup)(void); > }; > > /* Tests */ > @@ -66,6 +68,8 @@ int test__fdarray__add(void); > int test__kmod_path__parse(void); > int test__thread_map(void); > int test__llvm(void); > +void test__llvm_prepare(void); > +void test__llvm_cleanup(void); > int test_session_topology(void); > > #if defined(__arm__) || defined(__aarch64__) > -- > 1.8.3.4 >
| |