rcu-tasks: Make RCU Tasks Trace stall warning handle idle offline tasks
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 25 May 2022 16:49:26 +0000 (09:49 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 20 Jun 2022 16:22:28 +0000 (09:22 -0700)
When a CPU is offline, its idle task can appear to be running, but it
cannot be doing anything while CPU-hotplug operations are excluded.
This commit takes advantage of that fact by making trc_check_slow_task()
check for task_curr(t) && cpu_online(task_cpu(t)), and recording
full information in that case.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Neeraj Upadhyay <quic_neeraju@quicinc.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Martin KaFai Lau <kafai@fb.com>
Cc: KP Singh <kpsingh@kernel.org>
kernel/rcu/tasks.h

index 5eefbab7f2edbdf2980666743eec89dc40836526..64eb4d7b142e38011c36e657f7edb955ea279fc4 100644 (file)
@@ -1476,7 +1476,7 @@ static int trc_check_slow_task(struct task_struct *t, void *arg)
 {
        struct trc_stall_chk_rdr *trc_rdrp = arg;
 
-       if (task_curr(t))
+       if (task_curr(t) && cpu_online(task_cpu(t)))
                return false; // It is running, so decline to inspect it.
        trc_rdrp->nesting = READ_ONCE(t->trc_reader_nesting);
        trc_rdrp->ipi_to_cpu = READ_ONCE(t->trc_ipi_to_cpu);