On Thu, Dec 09, 2021 at 11:38:28AM -0800, Andrii Nakryiko wrote: > Add new open options and per-program setters to control BTF and program > loading log verboseness and allow providing custom log buffers to capture logs > of interest. Note how custom log_buf and log_level are orthogonal, which > matches previous (alas less customizable) behavior of libbpf, even though it > sort of worked by accident: if someone specified log_level = 1 in > bpf_object__load_xattr(), first attempt to load any BPF program resulted in > wasted bpf() syscall with -EINVAL due to !!log_buf != !!log_level. Then on > retry libbpf would allocated log_buffer and try again, after which prog > loading would succeed and libbpf would print verbose program loading log > through its print callback. > > This behavior is now documented and made more efficient, not wasting > unnecessary syscall. But additionally, log_level can be controlled globally on > a per-bpf_object level through bpf_object_open_opts, as well as on > a per-program basis with bpf_program__set_log_buf() and > bpf_program__set_log_level() APIs. > > Now that we have a more future-proof way to set log_level, deprecate > bpf_object__load_xattr(). > > v2->v3: > - added log_buf selftests for bpf_prog_load() and bpf_btf_load(); > - fix !log_buf in bpf_prog_load (John); > - fix log_level==0 in bpf_btf_load (thanks selftest!); Applied, Thanks