[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240802092406.GC12343@redhat.com>
Date: Fri, 2 Aug 2024 11:24:06 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: "Liao, Chang" <liaochang1@...wei.com>
Cc: mhiramat@...nel.org, peterz@...radead.org, mingo@...hat.com,
acme@...nel.org, namhyung@...nel.org, mark.rutland@....com,
alexander.shishkin@...ux.intel.com, jolsa@...nel.org,
irogers@...gle.com, adrian.hunter@...el.com,
kan.liang@...ux.intel.com, linux-kernel@...r.kernel.org,
linux-trace-kernel@...r.kernel.org,
linux-perf-users@...r.kernel.org
Subject: Re: [PATCH] uprobes: Improve scalability by reducing the contention
on siglock
On 08/02, Liao, Chang wrote:
>
>
> 在 2024/8/1 22:06, Oleg Nesterov 写道:
> > On 08/01, Liao Chang wrote:
> >>
> >> @@ -2276,22 +2277,25 @@ static void handle_singlestep(struct uprobe_task *utask, struct pt_regs *regs)
> >> int err = 0;
> >>
> >> uprobe = utask->active_uprobe;
> >> - if (utask->state == UTASK_SSTEP_ACK)
> >> + switch (utask->state) {
> >> + case UTASK_SSTEP_ACK:
> >> err = arch_uprobe_post_xol(&uprobe->arch, regs);
> >> - else if (utask->state == UTASK_SSTEP_TRAPPED)
> >> + break;
> >> + case UTASK_SSTEP_TRAPPED:
> >> arch_uprobe_abort_xol(&uprobe->arch, regs);
> >> - else
> >> + fallthrough;
> >> + case UTASK_SSTEP_DENY_SIGNAL:
> >> + set_tsk_thread_flag(current, TIF_SIGPENDING);
> >> + break;
> >> + default:
> >> WARN_ON_ONCE(1);
> >> + }
> >
> > Liao, at first glance this change looks "obviously wrong" to me.
>
> Oleg. Did i overlook some thing obvious here?
OK, lets suppose uprobe_deny_signal() sets UTASK_SSTEP_DENY_SIGNAL.
In this case handle_singlestep() will only set TIF_SIGPENDING and
do nothing else. This is wrong, either _post_xol() or _abort_xol()
must be called.
But I think handle_singlestep() will never hit this case. In the
likely case uprobe_post_sstep_notifier() will replace _DENY_SIGNAL
with _ACK, and this means that handle_singlestep() won't restore
TIF_SIGPENDING cleared by uprobe_deny_signal().
Oleg.
Powered by blists - more mailing lists