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: Mon, 15 Jun 2020 14:56:55 +0200 From: Peter Zijlstra <peterz@...radead.org> To: mingo@...nel.org, tglx@...utronix.de Cc: linux-kernel@...r.kernel.org, juri.lelli@...hat.com, vincent.guittot@...aro.org, dietmar.eggemann@....com, rostedt@...dmis.org, bsegall@...gle.com, mgorman@...e.de, paulmck@...nel.org, frederic@...nel.org, peterz@...radead.org Subject: [PATCH 1/6] sched: Fix ttwu_queue_cond() Where the condition: !cpus_share_cache(smp_processor_id(), cpu) already implies 'cpu != smp_processor_id()', because a CPU always shares cache with itself, the secondary condition added in commit: 2ebb17717550 ("sched/core: Offload wakee task activation if it the wakee is descheduling") voids that implication, resulting in attempting to do local wake-ups through the queue mechanism. Fixes: 2ebb17717550 ("sched/core: Offload wakee task activation if it the wakee is descheduling") Reported-by: Paul E. McKenney <paulmck@...nel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org> Tested-by: Paul E. McKenney <paulmck@...nel.org> --- kernel/sched/core.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2356,11 +2356,22 @@ bool cpus_share_cache(int this_cpu, int static inline bool ttwu_queue_cond(int cpu, int wake_flags) { + int this_cpu = smp_processor_id(); + + /* + * Only ever queue for remote wakeups. The on_cpu case can only ever + * happen remotely, and for the normal case it makes no sense to + * involve IPIs here, and would be broken, as many architectures cannot + * trivially IPI self in any case. + */ + if (cpu == this_cpu) + return false; + /* * If the CPU does not share cache, then queue the task on the * remote rqs wakelist to avoid accessing remote data. */ - if (!cpus_share_cache(smp_processor_id(), cpu)) + if (!cpus_share_cache(this_cpu, cpu)) return true; /*
Powered by blists - more mailing lists