History

rcu: Pull deferred rcuog wake up to rcu_eqs_enter() callers

Deferred wakeup of rcuog kthreads upon RCU idle mode entry is going to be handled differently whether initiated by idle, user or guest. Prepare with pulling that control up to rcu_eqs_enter() callers.

Frederic Weisbecker committed 5 years ago

Commit 54b74291 parent e0ee4631 file · +10 −1Browse files

Unified · Split

kernel/rcu/tree.c+10−1
@@ -644,7 +644,6 @@ static noinstr void rcu_eqs_enter(bool user) · 643 unmodified lines
644644 trace_rcu_dyntick(TPS("Start"), rdp->dynticks_nesting, 0, atomic_read(&rdp->dynticks));
645645 WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && !user && !is_idle_task(current));
646646 rdp = this_cpu_ptr(&rcu_data);
647− do_nocb_deferred_wakeup(rdp);
648647 rcu_prepare_for_idle();
649648 rcu_preempt_deferred_qs(current);
650649
@@ -672,7 +671,10 @@ static noinstr void rcu_eqs_enter(bool user) · 21 unmodified lines
672671 */
673672 void rcu_idle_enter(void)
674673 {
674+ struct rcu_data *rdp = this_cpu_ptr(&rcu_data);
675+
675676 lockdep_assert_irqs_disabled();
677+ do_nocb_deferred_wakeup(rdp);
676678 rcu_eqs_enter(false);
677679 }
678680 EXPORT_SYMBOL_GPL(rcu_idle_enter);
@@ -691,7 +693,14 @@ EXPORT_SYMBOL_GPL(rcu_idle_enter); · 12 unmodified lines
691693 */
692694 noinstr void rcu_user_enter(void)
693695 {
696+ struct rcu_data *rdp = this_cpu_ptr(&rcu_data);
697+
694698 lockdep_assert_irqs_disabled();
699+
700+ instrumentation_begin();
701+ do_nocb_deferred_wakeup(rdp);
702+ instrumentation_end();
703+
695704 rcu_eqs_enter(true);
696705 }
697706 #endif /* CONFIG_NO_HZ_FULL */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t