]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
perf/uprobe: split uprobe_unregister()
authorPeter Zijlstra <peterz@infradead.org>
Tue, 3 Sep 2024 17:46:00 +0000 (10:46 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 5 Sep 2024 14:56:14 +0000 (16:56 +0200)
commit04b01625da130c7521b768996cd5e48052198b97
treed9f6d4adae5de1747d91f31fc70a9558c19e6127
parentcc01bd044e6a521d2cd128f685ee8d23ef0067f2
perf/uprobe: split uprobe_unregister()

With uprobe_unregister() having grown a synchronize_srcu(), it becomes
fairly slow to call. Esp. since both users of this API call it in a
loop.

Peel off the sync_srcu() and do it once, after the loop.

We also need to add uprobe_unregister_sync() into uprobe_register()'s
error handling path, as we need to be careful about returning to the
caller before we have a guarantee that partially attached consumer won't
be called anymore. This is an unlikely slow path and this should be
totally fine to be slow in the case of a failed attach.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: "Peter Zijlstra (Intel)" <peterz@infradead.org>
Co-developed-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Link: https://lore.kernel.org/r/20240903174603.3554182-6-andrii@kernel.org
include/linux/uprobes.h
kernel/events/uprobes.c
kernel/trace/bpf_trace.c
kernel/trace/trace_uprobe.c
tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c