perf test: Check environment before start real BPF test
Copying perf to old kernel system results: # perf test bpf 37: Test BPF filter : 37.1: Test basic BPF filtering : FAILED! 37.2: Test BPF prologue generation : Skip However, in case when kernel doesn't support a test case it should return 'Skip', 'FAILED!' should be reserved for kernel tests for when the kernel supports a feature that then fails to work as advertised. This patch checks environment before real testcase. Signed-off-by: Wang Nan <wangnan0@huawei.com> Suggested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Li Zefan <lizefan@huawei.com> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Will Deacon <will.deacon@arm.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1453715801-7732-7-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
fd786fac78
commit
6a7d550e8b
|
@ -1,7 +1,11 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/epoll.h>
|
#include <sys/epoll.h>
|
||||||
|
#include <util/util.h>
|
||||||
#include <util/bpf-loader.h>
|
#include <util/bpf-loader.h>
|
||||||
#include <util/evlist.h>
|
#include <util/evlist.h>
|
||||||
|
#include <linux/bpf.h>
|
||||||
|
#include <linux/filter.h>
|
||||||
|
#include <bpf/bpf.h>
|
||||||
#include "tests.h"
|
#include "tests.h"
|
||||||
#include "llvm.h"
|
#include "llvm.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -243,6 +247,36 @@ const char *test__bpf_subtest_get_desc(int i)
|
||||||
return bpf_testcase_table[i].desc;
|
return bpf_testcase_table[i].desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int check_env(void)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
unsigned int kver_int;
|
||||||
|
char license[] = "GPL";
|
||||||
|
|
||||||
|
struct bpf_insn insns[] = {
|
||||||
|
BPF_MOV64_IMM(BPF_REG_0, 1),
|
||||||
|
BPF_EXIT_INSN(),
|
||||||
|
};
|
||||||
|
|
||||||
|
err = fetch_kernel_version(&kver_int, NULL, 0);
|
||||||
|
if (err) {
|
||||||
|
pr_debug("Unable to get kernel version\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = bpf_load_program(BPF_PROG_TYPE_KPROBE, insns,
|
||||||
|
sizeof(insns) / sizeof(insns[0]),
|
||||||
|
license, kver_int, NULL, 0);
|
||||||
|
if (err < 0) {
|
||||||
|
pr_err("Missing basic BPF support, skip this test: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
close(err);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int test__bpf(int i)
|
int test__bpf(int i)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -255,6 +289,9 @@ int test__bpf(int i)
|
||||||
return TEST_SKIP;
|
return TEST_SKIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (check_env())
|
||||||
|
return TEST_SKIP;
|
||||||
|
|
||||||
err = __test__bpf(i);
|
err = __test__bpf(i);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue