From: Masami Hiramatsu (Google) <[email protected]> Add a trace option "disable_bpf" to disable BPF execution for fetchargs, forcing the execution to fallback to the interpreter loop. This is useful for evaluating BPF compilation performance impact.
Assisted-by: Antigravity:gemini-3.5-flash Signed-off-by: Masami Hiramatsu <[email protected]> --- kernel/trace/trace.c | 7 +++++++ kernel/trace/trace.h | 8 ++++++++ kernel/trace/trace_probe_tmpl.h | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index c9e182d40059..7c0f7b629fcb 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -9940,6 +9940,13 @@ struct trace_array *trace_get_global_array(void) } #endif +#ifdef CONFIG_BPF_SYSCALL +bool trace_probe_bpf_disabled(void) +{ + return !!(global_trace.trace_flags & TRACE_ITER(DISABLE_BPF)); +} +#endif + void __init early_trace_init(void) { if (tracepoint_printk) { diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 80fe152af1dd..bf83680e0ba7 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -1503,6 +1503,7 @@ extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf, C(PAUSE_ON_TRACE, "pause-on-trace"), \ C(HASH_PTR, "hash-ptr"), /* Print hashed pointer */ \ C(BITMASK_LIST, "bitmask-list"), \ + C(DISABLE_BPF, "disable_bpf"), \ FUNCTION_FLAGS \ FGRAPH_FLAGS \ STACK_FLAGS \ @@ -2505,4 +2506,11 @@ static inline int rv_init_interface(void) _args; \ }) +#ifdef CONFIG_BPF_SYSCALL +bool trace_probe_bpf_disabled(void); +#else +static inline bool trace_probe_bpf_disabled(void) { return false; } +#endif + #endif /* _LINUX_KERNEL_TRACE_H */ + diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h index 6ca2dfe59a0f..015208aefbaf 100644 --- a/kernel/trace/trace_probe_tmpl.h +++ b/kernel/trace/trace_probe_tmpl.h @@ -274,7 +274,7 @@ store_trace_args(void *data, struct trace_probe *tp, void *rec, void *edata, int ret, i; #ifdef CONFIG_BPF_SYSCALL - if (tp->prog) { + if (tp->prog && !trace_probe_bpf_disabled()) { struct fetch_bpf_ctx ctx = { .rec = rec, .edata = edata,
