All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chengming Zhou <chengming.zhou@linux.dev>
To: K Prateek Nayak <kprateek.nayak@amd.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Suren Baghdasaryan <surenb@google.com>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	linux-kernel@vger.kernel.org
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Valentin Schneider <vschneid@redhat.com>,
	Chengming Zhou <zhouchengming@bytedance.com>,
	Muchun Song <muchun.song@linux.dev>,
	"Gautham R. Shenoy" <gautham.shenoy@amd.com>,
	Chuyi Zhou <zhouchuyi@bytedance.com>
Subject: Re: [PATCH] psi: Fix race when task wakes up before psi_sched_switch() adjusts flags
Date: Fri, 27 Dec 2024 12:40:00 +0800	[thread overview]
Message-ID: <a23f1b43-5541-4647-a692-6008338308cc@linux.dev> (raw)
In-Reply-To: <4e6e7308-1d39-427d-af47-2957025f501b@amd.com>

On 2024/12/27 12:10, K Prateek Nayak wrote:
> Hello there,
> 
[...]
>>
>> Just made a quick fix and tested passed using your script.
> 
> Thank you! The diff seems to be malformed as a result of whitespaces but
> I was able to test if by recreating the diff. Feel free to add:
> 
> Reported-by: K Prateek Nayak <kprateek.nayak@amd.com>
> Closes: https://lore.kernel.org/lkml/20241226053441.1110-1- 
> kprateek.nayak@amd.com/
> Tested-by: K Prateek Nayak <kprateek.nayak@amd.com>
> 
> If you can give your sign off, I could add a commit message and send it on
> your behalf too.

Great, thanks for your time!

Signed-off-by: Chengming Zhou <chengming.zhou@linux.dev>

> 
>>
>> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
>> index 3e5a6bf587f9..065ac76c47f9 100644
>> --- a/kernel/sched/core.c
>> +++ b/kernel/sched/core.c
>> @@ -6641,7 +6641,6 @@ static void __sched notrace __schedule(int 
>> sched_mode)
>>           * as a preemption by schedule_debug() and RCU.
>>           */
>>          bool preempt = sched_mode > SM_NONE;
>> -       bool block = false;
>>          unsigned long *switch_count;
>>          unsigned long prev_state;
>>          struct rq_flags rf;
>> @@ -6702,7 +6701,7 @@ static void __sched notrace __schedule(int 
>> sched_mode)
>>                          goto picked;
>>                  }
>>          } else if (!preempt && prev_state) {
>> -               block = try_to_block_task(rq, prev, prev_state);
>> +               try_to_block_task(rq, prev, prev_state);
>>                  switch_count = &prev->nvcsw;
>>          }
>>
>> @@ -6748,7 +6747,8 @@ static void __sched notrace __schedule(int 
>> sched_mode)
>>
>>                  migrate_disable_switch(rq, prev);
>>                  psi_account_irqtime(rq, prev, next);
>> -               psi_sched_switch(prev, next, block);
>> +               psi_sched_switch(prev, next, !task_on_rq_queued(prev) ||
>> +                                               prev->se.sched_delayed);
>>
>>                  trace_sched_switch(preempt, prev, next, prev_state);
>>
>> diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h
>> index 8ee0add5a48a..65efe45fcc77 100644
>> --- a/kernel/sched/stats.h
>> +++ b/kernel/sched/stats.h
>> @@ -150,7 +150,7 @@ static inline void psi_enqueue(struct task_struct 
>> *p, int flags)
>>                  set = TSK_RUNNING;
>>                  if (p->in_memstall)
>>                          set |= TSK_MEMSTALL | TSK_MEMSTALL_RUNNING;
>> -       } else {
>> +       } else if (!task_on_cpu(task_rq(p), p)) {
> 
> One small nit. here
> 
> If the task is on CPU at this point, both set and clear are 0 but
> psi_task_change() is still called and I don't see it bailing out if it
> doesn't have to adjust any flags.

Yes.

> 
> Can we instead just do an early return if task_on_cpu(task_rq(p), p)
> returns true? I've tested that version too and I haven't seen any
> splats.

I thought it's good to preserve the current flow that:

if (restore)
	return;

if (migrate)
	...
else if (wakeup)
	...

As for early return when `task_on_cpu()`, it looks right to me.
Anyway, it's not a migrate or wakeup from PSI POV.

Thanks!

> 
>>                  /* Wakeup of new or sleeping task */
>>                  if (p->in_iowait)
>>                          clear |= TSK_IOWAIT;
> 

  reply	other threads:[~2024-12-27  4:40 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-26  5:34 [PATCH] psi: Fix race when task wakes up before psi_sched_switch() adjusts flags K Prateek Nayak
2024-12-26 10:43 ` Chengming Zhou
2024-12-26 11:04   ` K Prateek Nayak
2024-12-26 11:35     ` Chengming Zhou
2024-12-26 15:42       ` Chengming Zhou
2024-12-27  4:10         ` K Prateek Nayak
2024-12-27  4:40           ` Chengming Zhou [this message]
2024-12-27  4:54             ` K Prateek Nayak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a23f1b43-5541-4647-a692-6008338308cc@linux.dev \
    --to=chengming.zhou@linux.dev \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=gautham.shenoy@amd.com \
    --cc=hannes@cmpxchg.org \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=muchun.song@linux.dev \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=surenb@google.com \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=zhouchengming@bytedance.com \
    --cc=zhouchuyi@bytedance.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.