mirror of
https://github.com/netdata/libbpf.git
synced 2026-04-06 00:29:07 +08:00
libbpf: Wire through log_true_size for bpf_btf_load() API
Similar to what we did for bpf_prog_load() in previous patch, wire returning of log_true_size value from kernel back to the user through OPTS out field. Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20230406234205.323208-17-andrii@kernel.org
This commit is contained in:
committed by
Andrii Nakryiko
parent
c2fe7adb33
commit
2f01564c50
@@ -1083,9 +1083,9 @@ int bpf_raw_tracepoint_open(const char *name, int prog_fd)
|
|||||||
return libbpf_err_errno(fd);
|
return libbpf_err_errno(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bpf_btf_load(const void *btf_data, size_t btf_size, const struct bpf_btf_load_opts *opts)
|
int bpf_btf_load(const void *btf_data, size_t btf_size, struct bpf_btf_load_opts *opts)
|
||||||
{
|
{
|
||||||
const size_t attr_sz = offsetofend(union bpf_attr, btf_log_level);
|
const size_t attr_sz = offsetofend(union bpf_attr, btf_log_true_size);
|
||||||
union bpf_attr attr;
|
union bpf_attr attr;
|
||||||
char *log_buf;
|
char *log_buf;
|
||||||
size_t log_size;
|
size_t log_size;
|
||||||
@@ -1128,6 +1128,8 @@ int bpf_btf_load(const void *btf_data, size_t btf_size, const struct bpf_btf_loa
|
|||||||
attr.btf_log_level = 1;
|
attr.btf_log_level = 1;
|
||||||
fd = sys_bpf_fd(BPF_BTF_LOAD, &attr, attr_sz);
|
fd = sys_bpf_fd(BPF_BTF_LOAD, &attr, attr_sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OPTS_SET(opts, log_true_size, attr.btf_log_true_size);
|
||||||
return libbpf_err_errno(fd);
|
return libbpf_err_errno(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
11
src/bpf.h
11
src/bpf.h
@@ -124,11 +124,18 @@ struct bpf_btf_load_opts {
|
|||||||
char *log_buf;
|
char *log_buf;
|
||||||
__u32 log_level;
|
__u32 log_level;
|
||||||
__u32 log_size;
|
__u32 log_size;
|
||||||
|
/* output: actual total log contents size (including termintaing zero).
|
||||||
|
* It could be both larger than original log_size (if log was
|
||||||
|
* truncated), or smaller (if log buffer wasn't filled completely).
|
||||||
|
* If kernel doesn't support this feature, log_size is left unchanged.
|
||||||
|
*/
|
||||||
|
__u32 log_true_size;
|
||||||
|
size_t :0;
|
||||||
};
|
};
|
||||||
#define bpf_btf_load_opts__last_field log_size
|
#define bpf_btf_load_opts__last_field log_true_size
|
||||||
|
|
||||||
LIBBPF_API int bpf_btf_load(const void *btf_data, size_t btf_size,
|
LIBBPF_API int bpf_btf_load(const void *btf_data, size_t btf_size,
|
||||||
const struct bpf_btf_load_opts *opts);
|
struct bpf_btf_load_opts *opts);
|
||||||
|
|
||||||
LIBBPF_API int bpf_map_update_elem(int fd, const void *key, const void *value,
|
LIBBPF_API int bpf_map_update_elem(int fd, const void *key, const void *value,
|
||||||
__u64 flags);
|
__u64 flags);
|
||||||
|
|||||||
Reference in New Issue
Block a user