All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] sched/fair: Fix detection of per-CPU kthreads waking a task
@ 2021-12-01 14:34 Vincent Donnefort
  2021-12-03  8:34 ` Vincent Guittot
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Vincent Donnefort @ 2021-12-01 14:34 UTC (permalink / raw)
  To: peterz, mingo, vincent.guittot
  Cc: linux-kernel, mgorman, dietmar.eggemann, valentin.schneider,
	Vincent Donnefort

select_idle_sibling() has a special case for tasks woken up by a per-CPU
kthread, where the selected CPU is the previous one. However, the current
condition for this exit path is incomplete. A task can wake up from an
interrupt context (e.g. hrtimer), while a per-CPU kthread is running. A
such scenario would spuriously trigger the special case described above.
Also, a recent change made the idle task like a regular per-CPU kthread,
hence making that situation more likely to happen
(is_per_cpu_kthread(swapper) being true now).

Checking for task context makes sure select_idle_sibling() will not
interpret a wake up from any other context as a wake up by a per-CPU
kthread.

Fixes: 52262ee567ad ("sched/fair: Allow a per-CPU kthread waking a task to stack on the same CPU, to fix XFS performance regression")
Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com>

---
v1 -> v2:
  * is_idle_thread() -> in_task() to also include spurious detection when
    current != swapper. (Vincent Guittot)
---

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 945d987246c5..56db4ae85995 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6399,6 +6399,7 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
 	 * pattern is IO completions.
 	 */
 	if (is_per_cpu_kthread(current) &&
+	    in_task() &&
 	    prev == smp_processor_id() &&
 	    this_rq()->nr_running <= 1) {
 		return prev;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-12-06 15:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-01 14:34 [PATCH v2] sched/fair: Fix detection of per-CPU kthreads waking a task Vincent Donnefort
2021-12-03  8:34 ` Vincent Guittot
2021-12-03 12:35 ` Valentin Schneider
2021-12-04  9:53 ` Peter Zijlstra
2021-12-06  9:57   ` Vincent Donnefort
2021-12-06 15:22 ` [tip: sched/core] " tip-bot2 for Vincent Donnefort

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.