Commit 45f4b4a2 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcu-tasks: Add comments explaining task_struct strategy



Accesses to task_struct structures must be either protected by RCU
or by get_task_struct().  Tasks trace RCU uses these in a non-obvious
combination, in conjunction with an IPI handler.  This commit therefore
adds comments explaining this usage.

Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 2734d6c1
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -785,7 +785,10 @@ EXPORT_SYMBOL_GPL(show_rcu_tasks_rude_gp_kthread);
//	set that task's .need_qs flag so that task's next outermost
//	rcu_read_unlock_trace() will report the quiescent state (in which
//	case the count of readers is incremented).  If both attempts fail,
//	the task is added to a "holdout" list.
//	the task is added to a "holdout" list.  Note that IPIs are used
//	to invoke trc_read_check_handler() in the context of running tasks
//	in order to avoid ordering overhead on common-case shared-variable
//	accessses.
// rcu_tasks_trace_postscan():
//	Initialize state and attempt to identify an immediate quiescent
//	state as above (but only for idle tasks), unblock CPU-hotplug
@@ -994,6 +997,12 @@ static void trc_wait_for_one_reader(struct task_struct *t,
	}
	put_task_struct(t);

	// If this task is not yet on the holdout list, then we are in
	// an RCU read-side critical section.  Otherwise, the invocation of
	// rcu_add_holdout() that added it to the list did the necessary
	// get_task_struct().  Either way, the task cannot be freed out
	// from under this code.

	// If currently running, send an IPI, either way, add to list.
	trc_add_holdout(t, bhp);
	if (task_curr(t) &&