lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 27 Feb 2020 11:35:27 -0500 From: Qian Cai <cai@....pw> To: Valentin Schneider <valentin.schneider@....com> Cc: Mel Gorman <mgorman@...hsingularity.net>, Ingo Molnar <mingo@...nel.org>, Peter Zijlstra <a.p.zijlstra@...llo.nl>, Juri Lelli <juri.lelli@...hat.com>, Steven Rostedt <rostedt@...dmis.org>, paulmck@...nel.org, linux-kernel@...r.kernel.org Subject: Re: suspicious RCU due to "Prefer using an idle CPU as a migration target instead of comparing tasks" On Thu, 2020-02-27 at 15:26 +0000, Valentin Schneider wrote: > On Thu, Feb 27 2020, Qian Cai wrote: > > > On Thu, 2020-02-27 at 09:09 -0500, Qian Cai wrote: > > > The linux-next commit ff7db0bf24db ("sched/numa: Prefer using an idle CPU as a > > > migration target instead of comparing tasks") introduced a boot warning, > > > > This? > > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index a61d83ea2930..ca780cd1eae2 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -1607,7 +1607,9 @@ static void update_numa_stats(struct task_numa_env *env, > > if (ns->idle_cpu == -1) > > ns->idle_cpu = cpu; > > > > +rcu_read_lock(); > > idle_core = numa_idle_core(idle_core, cpu); > > +rcu_read_unlock(); > > } > > } > > > > > Hmph right, we have > numa_idle_core()->test_idle_cores()->rcu_dereference(). > > Dunno if it's preferable to wrap the entirety of update_numa_stats() or > if that fine-grained read-side section is ok. I could not come up with a better fine-grained one than this. diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index a61d83ea2930..980d03fa157c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1562,9 +1562,16 @@ static inline int numa_idle_core(int idle_core, int cpu) { #ifdef CONFIG_SCHED_SMT if (!static_branch_likely(&sched_smt_present) || - idle_core >= 0 || !test_idle_cores(cpu, false)) - return idle_core; + idle_core >= 0) { + bool idle; + rcu_read_lock(); + idle = test_idle_cores(cpu, false); + rcu_read_unlock(); + + if (!idle) + return idle_core; + } /* * Prefer cores instead of packing HT siblings * and triggering future load balancing.
Powered by blists - more mailing lists