Hi Paul, everyone, I noticed on reading code that the need_heavy_qs check and rcu_momentary_dyntick_idle() is only called for !PREEMPT kernels. Don't we need to call this for PREEMPT kernels for the benefit of nohz_full CPUs? Consider the following events: 1. Kernel is PREEMPT=y configuration. 2. CPU 2 is a nohz_full CPU running only a single task and the tick is off. 3. CPU 2 is running only in kernel mode and does not enter user mode or idle. 4. Grace period thread running on CPU 3 enter the fqs loop. 5. Enough time passes and it sets the need_heavy_qs for CPU2. 6. CPU 2 is still in kernel mode but does cond_resched(). 7. cond_resched() does not call rcu_momentary_dyntick_idle() because PREEMPT=y. Is 7. not calling rcu_momentary_dyntick_idle() a lost opportunity for the FQS loop to detect that the CPU has crossed a quiescent point? Is this done so that cond_resched() is fast for PREEMPT=y kernels? thanks, - Joel