@@ -1379,7 +1379,7 @@ static void *btf_get_raw_data(const struct btf *btf, __u32 *size, bool swap_endi
int btf_load_into_kernel(struct btf *btf,
char *log_buf, size_t log_sz, __u32 log_level,
- int token_fd)
+ int token_fd, bool btf_mandatory)
{
LIBBPF_OPTS(bpf_btf_load_opts, opts);
__u32 buf_sz = 0, raw_size;
@@ -1436,7 +1436,7 @@ int btf_load_into_kernel(struct btf *btf,
btf->fd = bpf_btf_load(raw_data, raw_size, &opts);
if (btf->fd < 0) {
/* time to turn on verbose mode and try again */
- if (log_level == 0) {
+ if (log_level == 0 && btf_mandatory) {
log_level = 1;
goto retry_load;
}
@@ -1447,10 +1447,11 @@ int btf_load_into_kernel(struct btf *btf,
goto retry_load;
err = -errno;
- pr_warn("BTF loading error: %s\n", errstr(err));
/* don't print out contents of custom log_buf */
- if (!log_buf && buf[0])
+ if (!log_buf && buf[0]) {
+ pr_warn("BTF loading error: %s\n", errstr(err));
pr_warn("-- BEGIN BTF LOAD LOG ---\n%s\n-- END BTF LOAD LOG --\n", buf);
+ }
}
done:
@@ -1460,7 +1461,7 @@ int btf_load_into_kernel(struct btf *btf,
int btf__load_into_kernel(struct btf *btf)
{
- return btf_load_into_kernel(btf, NULL, 0, 0, 0);
+ return btf_load_into_kernel(btf, NULL, 0, 0, 0, true);
}
int btf__fd(const struct btf *btf)
@@ -3604,9 +3604,10 @@ static int bpf_object__sanitize_and_load_btf(struct bpf_object *obj)
*/
btf__set_fd(kern_btf, 0);
} else {
+ btf_mandatory = kernel_needs_btf(obj);
/* currently BPF_BTF_LOAD only supports log_level 1 */
err = btf_load_into_kernel(kern_btf, obj->log_buf, obj->log_size,
- obj->log_level ? 1 : 0, obj->token_fd);
+ obj->log_level ? 1 : 0, obj->token_fd, btf_mandatory);
}
if (sanitize) {
if (!err) {
@@ -408,7 +408,7 @@ int libbpf__load_raw_btf(const char *raw_types, size_t types_len,
int token_fd);
int btf_load_into_kernel(struct btf *btf,
char *log_buf, size_t log_sz, __u32 log_level,
- int token_fd);
+ int token_fd, bool btf_mandatory);
struct btf *btf_get_from_fd(int btf_fd, struct btf *base_btf);
void btf_get_kernel_prefix_kind(enum bpf_attach_type attach_type,
For kernels where btf is not mandatory we don't need to log btf loading errors if a log buf is not provided and the log_level is 0. This is unneeded noise. Signed-off-by: Jordan Rome <linux@jordanrome.com> --- tools/lib/bpf/btf.c | 11 ++++++----- tools/lib/bpf/libbpf.c | 3 ++- tools/lib/bpf/libbpf_internal.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) -- 2.43.5