rcu: Add TPS() to event-traced strings
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 6 Jun 2017 22:49:39 +0000 (15:49 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 17 Aug 2017 14:26:05 +0000 (07:26 -0700)
Strings used in event tracing need to be specially handled, for example,
using the TPS() macro.  Without the TPS() macro, although output looks
fine from within a running kernel, extracting traces from a crash dump
produces garbage instead of strings.  This commit therefore adds the TPS()
macro to some unadorned strings that were passed to event-tracing macros.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/rcu/tree_plugin.h

index bb9e6e4..14ba496 100644 (file)
@@ -2073,7 +2073,7 @@ wait_again:
 
        /* Wait for callbacks to appear. */
        if (!rcu_nocb_poll) {
-               trace_rcu_nocb_wake(my_rdp->rsp->name, my_rdp->cpu, "Sleep");
+               trace_rcu_nocb_wake(my_rdp->rsp->name, my_rdp->cpu, TPS("Sleep"));
                swait_event_interruptible(my_rdp->nocb_wq,
                                !READ_ONCE(my_rdp->nocb_leader_sleep));
                raw_spin_lock_irqsave(&my_rdp->nocb_lock, flags);
@@ -2083,7 +2083,7 @@ wait_again:
                raw_spin_unlock_irqrestore(&my_rdp->nocb_lock, flags);
        } else if (firsttime) {
                firsttime = false; /* Don't drown trace log with "Poll"! */
-               trace_rcu_nocb_wake(my_rdp->rsp->name, my_rdp->cpu, "Poll");
+               trace_rcu_nocb_wake(my_rdp->rsp->name, my_rdp->cpu, TPS("Poll"));
        }
 
        /*
@@ -2111,7 +2111,7 @@ wait_again:
                        schedule_timeout_interruptible(1);
                } else {
                        trace_rcu_nocb_wake(my_rdp->rsp->name, my_rdp->cpu,
-                                           "WokeEmpty");
+                                           TPS("WokeEmpty"));
                }
                goto wait_again;
        }
@@ -2155,7 +2155,7 @@ wait_again:
 static void nocb_follower_wait(struct rcu_data *rdp)
 {
        for (;;) {
-               trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "FollowerSleep");
+               trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("FollowerSleep"));
                swait_event_interruptible(rdp->nocb_wq,
                                         READ_ONCE(rdp->nocb_follower_head));
                if (smp_load_acquire(&rdp->nocb_follower_head)) {
@@ -2163,7 +2163,7 @@ static void nocb_follower_wait(struct rcu_data *rdp)
                        return;
                }
                WARN_ON(signal_pending(current));
-               trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeEmpty");
+               trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("WokeEmpty"));
        }
 }
 
@@ -2198,7 +2198,7 @@ static int rcu_nocb_kthread(void *arg)
                rdp->nocb_follower_tail = &rdp->nocb_follower_head;
                raw_spin_unlock_irqrestore(&rdp->nocb_lock, flags);
                BUG_ON(!list);
-               trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeNonEmpty");
+               trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("WokeNonEmpty"));
 
                /* Each pass through the following loop invokes a callback. */
                trace_rcu_batch_start(rdp->rsp->name,