Re: [PATCH] uprobes: Improve scalability by reducing the contention on siglock

From
Liao, Chang <hidden>
Date
2024-08-08 12:31:44
Also in
bpf, linux-perf-users, lkml
Reply to
Oleg Nesterov, 2024-08-08

在 2024/8/8 18:28, Oleg Nesterov 写道:
quoted hunk ↗ jump to hunk
On 08/08, Liao, Chang wrote:
quoted
  - pre_ssout() resets the deny signal flag

  - uprobe_deny_signal() sets the deny signal flag when TIF_SIGPENDING is cleared.

  - handle_singlestep() check the deny signal flag and restore TIF_SIGPENDING if necessary.

Does this approach look correct to you,do do you have any other way to implement the "flag"?
Yes. But I don't think pre_ssout() needs to clear this flag. handle_singlestep() resets/clears
state, active_uprobe, frees insn slot. So I guess we only need

--- x/kernel/events/uprobes.c
+++ x/kernel/events/uprobes.c
@@ -2308,9 +2308,10 @@ static void handle_singlestep(struct upr
 	utask->state = UTASK_RUNNING;
 	xol_free_insn_slot(current);
 
-	spin_lock_irq(&current->sighand->siglock);
-	recalc_sigpending(); /* see uprobe_deny_signal() */
-	spin_unlock_irq(&current->sighand->siglock);
+	if (utask->xxx) {
+		set_thread_flag(TIF_SIGPENDING);
+		utask->xxx = 0;
+	}
Agree, if no more discussion about this flag, I will just send v2 today.

Thanks.
 
 	if (unlikely(err)) {
 		uprobe_warn(current, "execute the probed insn, sending SIGILL.");

and that is all.

Oleg.
-- 
BR
Liao, Chang
Thread (11 messages) 11 messages, 2 authors, last reply 2024-08-08
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help