From da0e16bd262d51ee828045a07b00d29ee0bd451b Mon Sep 17 00:00:00 2001 From: Wang Han <416810799@qq.com> Date: Fri, 7 Nov 2025 17:40:49 +0800 Subject: [PATCH] Replace mutex with spinlock for tracepoint registration (#2882) --- kernel/sucompat.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/kernel/sucompat.c b/kernel/sucompat.c index 2b500acc..a7a2f6f3 100644 --- a/kernel/sucompat.c +++ b/kernel/sucompat.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -440,11 +441,12 @@ static struct kprobe *pts_kp = NULL; #ifdef CONFIG_KRETPROBES static int tracepoint_reg_count = 0; -static DEFINE_MUTEX(tracepoint_reg_mutex); +static DEFINE_SPINLOCK(tracepoint_reg_lock); static int syscall_regfunc_handler(struct kretprobe_instance *ri, struct pt_regs *regs) { - mutex_lock(&tracepoint_reg_mutex); + unsigned long flags; + spin_lock_irqsave(&tracepoint_reg_lock, flags); if (tracepoint_reg_count < 1) { // while install our tracepoint, mark our processes unmark_all_process(); @@ -454,13 +456,14 @@ static int syscall_regfunc_handler(struct kretprobe_instance *ri, struct pt_regs mark_all_process(); } tracepoint_reg_count++; - mutex_unlock(&tracepoint_reg_mutex); + spin_unlock_irqrestore(&tracepoint_reg_lock, flags); return 0; } static int syscall_unregfunc_handler(struct kretprobe_instance *ri, struct pt_regs *regs) { - mutex_lock(&tracepoint_reg_mutex); + unsigned long flags; + spin_lock_irqsave(&tracepoint_reg_lock, flags); if (tracepoint_reg_count <= 1) { // while uninstall our tracepoint, unmark all processes unmark_all_process(); @@ -470,7 +473,7 @@ static int syscall_unregfunc_handler(struct kretprobe_instance *ri, struct pt_re ksu_mark_running_process(); } tracepoint_reg_count--; - mutex_unlock(&tracepoint_reg_mutex); + spin_unlock_irqrestore(&tracepoint_reg_lock, flags); return 0; }