rcuscale: Make all writer tasks report upon hang
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 2 Aug 2024 00:43:04 +0000 (17:43 -0700)
committerNeeraj Upadhyay <neeraj.upadhyay@kernel.org>
Wed, 14 Aug 2024 18:44:48 +0000 (00:14 +0530)
This commit causes all writer tasks to provide a brief report after a
hang has been reported, spaced at one-second intervals.

Signed-off-by: "Paul E. McKenney" <paulmck@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
kernel/rcu/rcuscale.c

index 79e1c32d5c0fab744910dc1c0dc00949a34bfc44..dfe8e0faa4d86bba36d6425163dd984c06bebc8d 100644 (file)
@@ -483,6 +483,7 @@ rcu_scale_writer(void *arg)
        unsigned long jdone;
        long me = (long)arg;
        struct rcu_head *rhp = NULL;
+       bool selfreport = false;
        bool started = false, done = false, alldone = false;
        u64 t;
        DEFINE_TORTURE_RANDOM(tr);
@@ -593,6 +594,11 @@ retry:
                                        cur_ops->stats();
                        }
                }
+               if (!selfreport && time_after(jiffies, jdone + HZ * (70 + me))) {
+                       pr_info("%s: Writer %ld self-report: started %d done %d/%d->%d i %d jdone %lu.\n",
+                               __func__, me, started, done, writer_done[me], atomic_read(&n_rcu_scale_writer_finished), i, jiffies - jdone);
+                       selfreport = true;
+               }
                if (started && !alldone && i < MAX_MEAS - 1)
                        i++;
                rcu_scale_wait_shutdown();