Commit 223f16b8 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Uladzislau Rezki (Sony)
Browse files

rcutorture: Add per-reader-segment preemption diagnostics



For preemptible RCU, this commit adds an indication for each
reader segments to whether the rcu_torture_reader() task was
on the ->blkd_tasks lists, though only in kernels built with
CONFIG_RCU_TORTURE_TEST_LOG_CPU=y.

Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
parent 885a6f47
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -464,10 +464,8 @@ rcu_read_delay(struct torture_random_state *rrsp, struct rt_read_seg *rtrsp)
		rtrsp->rt_delay_us = shortdelay_us;
	}
	if (!preempt_count() &&
	    !(torture_random(rrsp) % (nrealreaders * 500))) {
	    !(torture_random(rrsp) % (nrealreaders * 500)))
		torture_preempt_schedule();  /* QS only if preemptible. */
		rtrsp->rt_preempted = true;
	}
}

static void rcu_torture_read_unlock(int idx)
@@ -1961,8 +1959,11 @@ static void rcutorture_one_extend(int *readstate, int newstate, bool insoftirq,
	if (IS_ENABLED(CONFIG_RCU_TORTURE_TEST_LOG_CPU)) {
		int cpu = raw_smp_processor_id();
		rtrsp->rt_cpu = cpu;
		if (!first)
		if (!first) {
			rtrsp[-1].rt_end_cpu = cpu;
			if (cur_ops->reader_blocked)
				rtrsp[-1].rt_preempted = cur_ops->reader_blocked();
		}
	}

	/*