[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210828052006.1313788-1-davemarchevsky@fb.com>
Date: Fri, 27 Aug 2021 22:19:59 -0700
From: Dave Marchevsky <davemarchevsky@...com>
To: <bpf@...r.kernel.org>
CC: Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Andrii Nakryiko <andrii@...nel.org>,
Yonghong Song <yhs@...com>, <netdev@...r.kernel.org>,
Dave Marchevsky <davemarchevsky@...com>
Subject: [PATCH v3 bpf-next 0/7] bpf: implement variadic printk helper
This series introduces a new helper, bpf_trace_vprintk, which functions
like bpf_trace_printk but supports > 3 arguments via a pseudo-vararg u64
array. The bpf_printk libbpf convenience macro is modified to use
bpf_trace_vprintk when > 3 varargs are passed, otherwise the previous
behavior - using bpf_trace_printk - is retained.
Helper functions and macros added during the implementation of
bpf_seq_printf and bpf_snprintf do most of the heavy lifting for
bpf_trace_vprintk. There's no novel format string wrangling here.
Usecase here is straightforward: Giving BPF program writers a more
powerful printk will ease development of BPF programs, particularly
during debugging and testing, where printk tends to be used.
This feature was proposed by Andrii in libbpf mirror's issue tracker
[1].
[1] https://github.com/libbpf/libbpf/issues/315
v2 -> v3:
* Clean up patch 3's commit message [Alexei]
* Add patch 4, which modifies __bpf_printk to use 'static const char' to
store fmt string with fallback for older kernels [Andrii]
* rebase
v1 -> v2:
* Naming conversation seems to have gone in favor of keeping
bpf_trace_vprintk, names are unchanged
* Patch 3 now modifies bpf_printk convenience macro to choose between
__bpf_printk and __bpf_vprintk 'implementation' macros based on arg
count. __bpf_vprintk is a renaming of bpf_vprintk convenience macro
from v1, __bpf_printk is the existing bpf_printk implementation.
This patch could use some scrutiny as I think current implementation
may regress developer experience in a specific case, turning a
compile-time error into a load-time error. Unclear to me how
common the case is, or whether the macro magic I chose is ideal.
* char ___fmt[] to static const char ___fmt[] change was not done,
wanted to leave __bpf_printk 'implementation' macro unchanged for v2
to ease discussion of above point
* Removed __always_inline from __set_printk_clr_event [Andrii]
* Simplified bpf_trace_printk docstring to refer to other functions
instead of copy/pasting and avoid specifying 12 vararg limit [Andrii]
* Migrated trace_printk selftest to use ASSERT_ instead of CHECK
* Adds new patch 5, previous patch 5 is now 6
* Migrated trace_vprintk selftest to use ASSERT_ instead of CHECK,
open_and_load instead of separate open, load [Andrii]
* Patch 2's commit message now correctly mentions trace_pipe instead of
dmesg [Andrii]
Dave Marchevsky (7):
bpf: merge printk and seq_printf VARARG max macros
bpf: add bpf_trace_vprintk helper
libbpf: Modify bpf_printk to choose helper based on arg count
libbpf: use static const fmt string in __bpf_printk
bpftool: only probe trace_vprintk feature in 'full' mode
selftests/bpf: Migrate prog_tests/trace_printk CHECKs to ASSERTs
selftests/bpf: add trace_vprintk test prog
include/linux/bpf.h | 3 +
include/uapi/linux/bpf.h | 9 +++
kernel/bpf/core.c | 5 ++
kernel/bpf/helpers.c | 6 +-
kernel/trace/bpf_trace.c | 54 ++++++++++++++-
tools/bpf/bpftool/feature.c | 1 +
tools/include/uapi/linux/bpf.h | 9 +++
tools/lib/bpf/bpf_helpers.h | 51 ++++++++++++---
tools/testing/selftests/bpf/Makefile | 3 +-
.../selftests/bpf/prog_tests/trace_printk.c | 24 +++----
.../selftests/bpf/prog_tests/trace_vprintk.c | 65 +++++++++++++++++++
.../selftests/bpf/progs/trace_vprintk.c | 25 +++++++
tools/testing/selftests/bpf/test_bpftool.py | 22 +++----
13 files changed, 234 insertions(+), 43 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/trace_vprintk.c
create mode 100644 tools/testing/selftests/bpf/progs/trace_vprintk.c
--
2.30.2
Powered by blists - more mailing lists