diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2017-04-11 15:50:41 -0700 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2017-04-21 05:59:27 -0700 |
commit | bcbfdd01dce5556a952fae84ef16fd0f12525e7b (patch) | |
tree | d674b23e7a573c6e5234acb5e914fc60e581594a /kernel/rcu/update.c | |
parent | 0497b489b8255054f113fd31faeb72f6dbc50a68 (diff) | |
download | lwn-bcbfdd01dce5556a952fae84ef16fd0f12525e7b.tar.gz lwn-bcbfdd01dce5556a952fae84ef16fd0f12525e7b.zip |
rcu: Make non-preemptive schedule be Tasks RCU quiescent state
Currently, a call to schedule() acts as a Tasks RCU quiescent state
only if a context switch actually takes place. However, just the
call to schedule() guarantees that the calling task has moved off of
whatever tracing trampoline that it might have been one previously.
This commit therefore plumbs schedule()'s "preempt" parameter into
rcu_note_context_switch(), which then records the Tasks RCU quiescent
state, but only if this call to schedule() was -not- due to a preemption.
To avoid adding overhead to the common-case context-switch path,
this commit hides the rcu_note_context_switch() check under an existing
non-common-case check.
Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/update.c')
-rw-r--r-- | kernel/rcu/update.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index c5df0d756900..273e869ca21d 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c @@ -665,6 +665,7 @@ static void check_holdout_task(struct task_struct *t, put_task_struct(t); return; } + rcu_request_urgent_qs_task(t); if (!needreport) return; if (*firstreport) { |