Commit 65e6ff0f authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Boqun Feng
Browse files

rcutorture: Add ftrace-compatible timestamp to GP# failure/close-call output



This commit adds an ftrace-compatible microsecond-scale timestamp
to the failure/close-call output, but only in kernels built with
CONFIG_RCU_TORTURE_TEST_LOG_GP=y.

Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Signed-off-by: default avatarBoqun Feng <boqun.feng@gmail.com>
parent a8f7c9c4
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -275,6 +275,7 @@ struct rt_read_seg {
	int rt_end_cpu;
	unsigned long long rt_gp_seq;
	unsigned long long rt_gp_seq_end;
	u64 rt_ts;
};
static int err_segs_recorded;
static struct rt_read_seg err_segs[RCUTORTURE_RDR_MAX_SEGS];
@@ -1989,6 +1990,7 @@ static void rcutorture_one_extend(int *readstate, int newstate, bool insoftirq,
	// Sample grace-period sequence number, as good a place as any.
	if (IS_ENABLED(CONFIG_RCU_TORTURE_TEST_LOG_GP) && cur_ops->gather_gp_seqs) {
		rtrsp->rt_gp_seq = cur_ops->gather_gp_seqs();
		rtrsp->rt_ts = ktime_get_mono_fast_ns();
		if (!first)
			rtrsp[-1].rt_gp_seq_end = rtrsp->rt_gp_seq;
	}
@@ -3663,7 +3665,11 @@ rcu_torture_cleanup(void)
			pr_alert("\t: No segments recorded!!!\n");
		firsttime = 1;
		for (i = 0; i < rt_read_nsegs; i++) {
			pr_alert("\t%d: %#4x", i, err_segs[i].rt_readstate);
			if (IS_ENABLED(CONFIG_RCU_TORTURE_TEST_LOG_GP))
				pr_alert("\t%lluus ", div64_u64(err_segs[i].rt_ts, 1000ULL));
			else
				pr_alert("\t");
			pr_cont("%d: %#4x", i, err_segs[i].rt_readstate);
			if (err_segs[i].rt_delay_jiffies != 0) {
				pr_cont("%s%ldjiffies", firsttime ? "" : "+",
					err_segs[i].rt_delay_jiffies);