On 2020-03-18 20:47:18 [-0400], Joel Fernandes wrote: > In RCU, there are some truly-atomic code sections containing an > swake_upXX() call, which would be considered atomic also on > PREEMPT_RT, one example is: > > rcu_core() contains an local_irq_{save,restore}() section. > > /* No grace period and unregistered callbacks? */ > if (!rcu_gp_in_progress() && > rcu_segcblist_is_enabled(&rdp->cblist) && !offloaded) { > local_irq_save(flags); > if (!rcu_segcblist_restempty(&rdp->cblist, RCU_NEXT_READY_TAIL)) > rcu_accelerate_cbs_unlocked(rnp, rdp); > local_irq_restore(flags); > } > > And rcu_accelerate_cbs_unlocked(rnp, rdp) calls rcu_gp_kthread_wake() > which does an swake_up_one(), so I think we will have to leave it as > swake_up() the way it is. There is also this: irq_exit() rcu_irq_exit() rcu_nmi_exit_common(true); rcu_prepare_for_idle() if (rcu_segcblist_pend_cbs(&rdp->cblist)) rcu_gp_kthread_wake() swake_up_one(&rcu_state.gp_wq); So I *think* this is another one. > thanks, > > - Joel Sebastian