[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200615131143.130326165@infradead.org>
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