aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/rcu/update.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
index f86d1ae50005..9487b4898e51 100644
--- a/kernel/rcu/update.c
+++ b/kernel/rcu/update.c
@@ -48,6 +48,7 @@
48#include <linux/delay.h> 48#include <linux/delay.h>
49#include <linux/module.h> 49#include <linux/module.h>
50#include <linux/kthread.h> 50#include <linux/kthread.h>
51#include <linux/tick.h>
51 52
52#define CREATE_TRACE_POINTS 53#define CREATE_TRACE_POINTS
53 54
@@ -461,6 +462,8 @@ EXPORT_SYMBOL_GPL(rcu_barrier_tasks);
461static void check_holdout_task(struct task_struct *t, 462static void check_holdout_task(struct task_struct *t,
462 bool needreport, bool *firstreport) 463 bool needreport, bool *firstreport)
463{ 464{
465 int cpu;
466
464 if (!ACCESS_ONCE(t->rcu_tasks_holdout) || 467 if (!ACCESS_ONCE(t->rcu_tasks_holdout) ||
465 t->rcu_tasks_nvcsw != ACCESS_ONCE(t->nvcsw) || 468 t->rcu_tasks_nvcsw != ACCESS_ONCE(t->nvcsw) ||
466 !ACCESS_ONCE(t->on_rq) || 469 !ACCESS_ONCE(t->on_rq) ||
@@ -477,6 +480,12 @@ static void check_holdout_task(struct task_struct *t,
477 pr_err("INFO: rcu_tasks detected stalls on tasks:\n"); 480 pr_err("INFO: rcu_tasks detected stalls on tasks:\n");
478 *firstreport = false; 481 *firstreport = false;
479 } 482 }
483 cpu = task_cpu(t);
484 pr_alert("%p: %c%c nvcsw: %lu/%lu holdout: %d idle_cpu: %d/%d\n",
485 t, ".I"[is_idle_task(t)],
486 "N."[cpu < 0 || !tick_nohz_full_cpu(cpu)],
487 t->rcu_tasks_nvcsw, t->nvcsw, t->rcu_tasks_holdout,
488 t->rcu_tasks_idle_cpu, cpu);
480 sched_show_task(t); 489 sched_show_task(t);
481} 490}
482 491