tools lib bpf: Report error when kernel doesn't support program type
Now libbpf support tracepoint program type. Report meaningful error when kernel version is less than 4.7. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1468406646-21642-3-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
5f44e4c810
Коммит
705fa2190d
|
@ -90,6 +90,7 @@ static const char *libbpf_strerror_table[NR_ERRNO] = {
|
|||
[ERRCODE_OFFSET(VERIFY)] = "Kernel verifier blocks program loading",
|
||||
[ERRCODE_OFFSET(PROG2BIG)] = "Program too big",
|
||||
[ERRCODE_OFFSET(KVER)] = "Incorrect kernel version",
|
||||
[ERRCODE_OFFSET(PROGTYPE)] = "Kernel doesn't support this program type",
|
||||
};
|
||||
|
||||
int libbpf_strerror(int err, char *buf, size_t size)
|
||||
|
@ -926,15 +927,27 @@ load_program(enum bpf_prog_type type, struct bpf_insn *insns,
|
|||
pr_warning("-- BEGIN DUMP LOG ---\n");
|
||||
pr_warning("\n%s\n", log_buf);
|
||||
pr_warning("-- END LOG --\n");
|
||||
} else if (insns_cnt >= BPF_MAXINSNS) {
|
||||
pr_warning("Program too large (%d insns), at most %d insns\n",
|
||||
insns_cnt, BPF_MAXINSNS);
|
||||
ret = -LIBBPF_ERRNO__PROG2BIG;
|
||||
} else {
|
||||
if (insns_cnt >= BPF_MAXINSNS) {
|
||||
pr_warning("Program too large (%d insns), at most %d insns\n",
|
||||
insns_cnt, BPF_MAXINSNS);
|
||||
ret = -LIBBPF_ERRNO__PROG2BIG;
|
||||
} else if (log_buf) {
|
||||
pr_warning("log buffer is empty\n");
|
||||
ret = -LIBBPF_ERRNO__KVER;
|
||||
/* Wrong program type? */
|
||||
if (type != BPF_PROG_TYPE_KPROBE) {
|
||||
int fd;
|
||||
|
||||
fd = bpf_load_program(BPF_PROG_TYPE_KPROBE, insns,
|
||||
insns_cnt, license, kern_version,
|
||||
NULL, 0);
|
||||
if (fd >= 0) {
|
||||
close(fd);
|
||||
ret = -LIBBPF_ERRNO__PROGTYPE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (log_buf)
|
||||
ret = -LIBBPF_ERRNO__KVER;
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
@ -39,6 +39,7 @@ enum libbpf_errno {
|
|||
LIBBPF_ERRNO__VERIFY, /* Kernel verifier blocks program loading */
|
||||
LIBBPF_ERRNO__PROG2BIG, /* Program too big */
|
||||
LIBBPF_ERRNO__KVER, /* Incorrect kernel version */
|
||||
LIBBPF_ERRNO__PROGTYPE, /* Kernel doesn't support this program type */
|
||||
__LIBBPF_ERRNO__END,
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче