lkml.org 
[lkml]   [2022]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 7/9] ptrace: Simplify the wait_task_inactive call in ptrace_check_attach
    On 04/28, Peter Zijlstra wrote:
    >
    > On Thu, Apr 28, 2022 at 04:57:50PM +0200, Oleg Nesterov wrote:
    >
    > > > Shouldn't we then switch wait_task_inactive() so have & matching instead
    > > > of the current ==.
    > >
    > > Sorry, I don't understand the context...
    >
    > This.. I've always found it strange to have wti use a different matching
    > scheme from ttwu.

    Ah. This is what I understood (and I too thought about this), just I meant that
    this patch from Eric (assuming wait_task_inactive() still uses __TASK_TRACED) is
    fine without your change below.

    Oleg.

    > diff --git a/kernel/sched/core.c b/kernel/sched/core.c
    > index f259621f4c93..c039aef4c8fe 100644
    > --- a/kernel/sched/core.c
    > +++ b/kernel/sched/core.c
    > @@ -3304,7 +3304,7 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state
    > * is actually now running somewhere else!
    > */
    > while (task_running(rq, p)) {
    > - if (match_state && unlikely(READ_ONCE(p->__state) != match_state))
    > + if (match_state && unlikely(!(READ_ONCE(p->__state) & match_state)))
    > return 0;
    > cpu_relax();
    > }
    > @@ -3319,7 +3319,7 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state
    > running = task_running(rq, p);
    > queued = task_on_rq_queued(p);
    > ncsw = 0;
    > - if (!match_state || READ_ONCE(p->__state) == match_state)
    > + if (!match_state || (READ_ONCE(p->__state) & match_state))
    > ncsw = p->nvcsw | LONG_MIN; /* sets MSB */
    > task_rq_unlock(rq, p, &rf);

    \
     
     \ /
      Last update: 2022-04-28 18:21    [W:4.072 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site