Em Thu, Oct 15, 2015 at 07:58:38PM +0800, Wangnan (F) escreveu:
> >>+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.
> >
>
> Fixed by this way:
Can you please try refreshing this patchset on top of what is now in
acme/perf/core?
Also why do we need those struct test->{prepare,cleanup} pointers? You
introduced it and then, on the next patch that touches 'perf test' and
uses test__llvm_{prepare,cleanup} you call them directly, which I think
should be enough, i.e. keep them as functions to call from inside
the test called from run_test(), right?
- Arnaldo
> diff --git a/tools/perf/tests/llvm.c b/tools/perf/tests/llvm.c
> index e722e8a..25ddeaf 100644
> --- a/tools/perf/tests/llvm.c
> +++ b/tools/perf/tests/llvm.c
> @@ -199,12 +199,15 @@ void test__llvm_prepare(void)
>
> for (i = 0; llvm_testcases[i].source; i++) {
> struct test_llvm__bpf_result *result;
> + void *p;
>
> - result = mmap(NULL, SHARED_BUF_INIT_SIZE,
> - PROT_READ | PROT_WRITE,
> - MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> - if (!result)
> + p = mmap(NULL, SHARED_BUF_INIT_SIZE,
> + PROT_READ | PROT_WRITE,
> + MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> + if (p == MAP_FAILED)
> return;
> +
> + result = p;
> memset((void *)result, '\0', SHARED_BUF_INIT_SIZE);
>
> llvm_testcases[i].result = result;
>
> Thank you.
On 2015/11/4 2:24, Arnaldo Carvalho de Melo wrote:
> Em Thu, Oct 15, 2015 at 07:58:38PM +0800, Wangnan (F) escreveu:
>>>> +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.
>>>
>> Fixed by this way:
> Can you please try refreshing this patchset on top of what is now in
> acme/perf/core?
>
> Also why do we need those struct test->{prepare,cleanup} pointers? You
> introduced it and then, on the next patch that touches 'perf test' and
> uses test__llvm_{prepare,cleanup} you call them directly, which I think
> should be enough, i.e. keep them as functions to call from inside
> the test called from run_test(), right?
>
> - Arnaldo
>
This prepare/cleanup functions are introduced because I want BPF
test reuse the result of LLVM test, so it don't need to compile
those BPF scripts twice. This is the reason I use shared
memory. However, now I think compiling twice is acceptable and
can make things simpler.
I'll update this patchset in my next pull request.
Thank you.