Hi, Here is the 4th version of the series to unify the kretprobe trampoline handler and make kretprobe lockless. Previous version is here; https://lkml.kernel.org/r/159854631442.736475.5062989489155389472.stgit@devnote2 In this version, I updated the generic trampoline handler a bit, merge the Peter's lockless patches(*), and add an RFC "remove task scan" patch as [20/23]. (*) https://lkml.kernel.org/r/20200827161237.889877377@xxxxxxxxxxxxx I ran some tests and ftracetest on x86-64. Mostly OK, but hit a BUG in the trampoline handler once. I'm trying to reproduce it but not succeeded yet. So this may need a careful review and tests. I did something like: mount -t debugfs debug /sys/kernel/debug cd /sys/kernel/debug/tracing/ echo r:event1 vfs_read >> kprobe_events echo r:event2 vfs_read %ax >> kprobe_events echo r:event3 rw_verify_area %ax >> kprobe_events echo 1 > events/kprobes/enable sleep 1 less trace cat ../kprobes/list cd ~/linux/tools/testing/selftests/ftrace ./ftracetest Then hits a BUG_ON at kernel/kprobes.c:1893 (no test executed, maybe it happened when removing kretprobes?) Thank you, --- Masami Hiramatsu (17): kprobes: Add generic kretprobe trampoline handler x86/kprobes: Use generic kretprobe trampoline handler arm: kprobes: Use generic kretprobe trampoline handler arm64: kprobes: Use generic kretprobe trampoline handler arc: kprobes: Use generic kretprobe trampoline handler csky: kprobes: Use generic kretprobe trampoline handler ia64: kprobes: Use generic kretprobe trampoline handler mips: kprobes: Use generic kretprobe trampoline handler parisc: kprobes: Use generic kretprobe trampoline handler powerpc: kprobes: Use generic kretprobe trampoline handler s390: kprobes: Use generic kretprobe trampoline handler sh: kprobes: Use generic kretprobe trampoline handler sparc: kprobes: Use generic kretprobe trampoline handler kprobes: Remove NMI context check kprobes: Free kretprobe_instance with rcu callback kprobes: Make local used functions static [RFC] kprobes: Remove task scan for updating kretprobe_instance Peter Zijlstra (6): llist: Add nonatomic __llist_add() sched: Fix try_invoke_on_locked_down_task() semantics kprobes: Remove kretprobe hash asm-generic/atomic: Add try_cmpxchg() fallbacks freelist: Lock less freelist kprobes: Replace rp->free_instance with freelist arch/arc/kernel/kprobes.c | 54 ------ arch/arm/probes/kprobes/core.c | 78 --------- arch/arm64/kernel/probes/kprobes.c | 78 --------- arch/csky/kernel/probes/kprobes.c | 77 -------- arch/ia64/kernel/kprobes.c | 77 -------- arch/mips/kernel/kprobes.c | 54 ------ arch/parisc/kernel/kprobes.c | 76 -------- arch/powerpc/kernel/kprobes.c | 53 ------ arch/s390/kernel/kprobes.c | 79 --------- arch/sh/kernel/kprobes.c | 58 ------ arch/sparc/kernel/kprobes.c | 51 ------ arch/x86/include/asm/atomic.h | 2 arch/x86/include/asm/atomic64_64.h | 2 arch/x86/include/asm/cmpxchg.h | 2 arch/x86/kernel/kprobes/core.c | 108 ------------ drivers/gpu/drm/i915/i915_request.c | 6 - include/asm-generic/atomic-instrumented.h | 216 ++++++++++++++---------- include/linux/atomic-arch-fallback.h | 90 +++++++++- include/linux/atomic-fallback.h | 90 +++++++++- include/linux/freelist.h | 129 ++++++++++++++ include/linux/kprobes.h | 73 +++++--- include/linux/llist.h | 15 ++ include/linux/sched.h | 4 kernel/fork.c | 4 kernel/kprobes.c | 263 +++++++++++++---------------- kernel/sched/core.c | 9 - kernel/trace/trace_kprobe.c | 3 scripts/atomic/gen-atomic-fallback.sh | 63 ++++++- scripts/atomic/gen-atomic-instrumented.sh | 29 +++ 29 files changed, 729 insertions(+), 1114 deletions(-) create mode 100644 include/linux/freelist.h -- Masami Hiramatsu (Linaro) <mhiramat@xxxxxxxxxx>