This series implements support for sleepable uprobe programs. Key work is in patches 2 and 3, the rest is plumbing and tests. The main observation is that the only obstacle in the way of sleepable uprobe programs is not the uprobe infrastructure, which already runs in a user context, but the rcu usage around bpf_prog_array. Details are in patch 2 but the tl;dr is that we chain trace_tasks and normal rcu grace periods when releasing to array to accommodate users of either rcu type. This introduces latency on non-sleepable users but that's deemed acceptable, given recent benchmarks by Andrii [1]. We're a couple of orders of magnitude under the rate of bpf_prog_array churn that would raise flags (~1MM/s per Paul). [1]: https://lore.kernel.org/bpf/CAEf4BzbpjN6ca7D9KOTiFPOoBYkciYvTz0UJNp5c-_3ptm=Mrg@xxxxxxxxxxxxxx/ Delyan Kratunov (5): bpf: move bpf_prog to bpf.h bpf: implement sleepable uprobes by chaining tasks and normal rcu bpf: allow sleepable uprobe programs to attach libbpf: add support for sleepable kprobe and uprobe programs selftests/bpf: add tests for sleepable kprobes and uprobes include/linux/bpf.h | 96 +++++++++++++++++++ include/linux/filter.h | 34 ------- include/linux/trace_events.h | 1 + kernel/bpf/core.c | 10 +- kernel/bpf/syscall.c | 8 ++ kernel/bpf/verifier.c | 4 +- kernel/trace/bpf_trace.c | 23 +++++ kernel/trace/trace_uprobe.c | 4 +- tools/lib/bpf/libbpf.c | 10 +- .../selftests/bpf/prog_tests/attach_probe.c | 35 +++++++ .../selftests/bpf/progs/test_attach_probe.c | 44 +++++++++ 11 files changed, 228 insertions(+), 41 deletions(-) -- 2.35.1