On Thu, Mar 21, 2019 at 03:31:28PM +0000, He, Bo wrote: > The rcu_gp_kthread_wake() function is invoked when it might be necessary > to wake the RCU grace-period kthread. Because self-wakeups are normally > a useless waste of CPU cycles, if rcu_gp_kthread_wake() is invoked from > this kthread, it naturally refuses to do the wakeup. > > Unfortunately, natural though it might be, this heuristic fails when > rcu_gp_kthread_wake() is invoked from an interrupt or softirq handler > that interrupted the grace-period kthread just after the final check of > the wait-event condition but just before the schedule() call. In this > case, a wakeup is required, even though the call to rcu_gp_kthread_wake() > is within the RCU grace-period kthread's context. Failing to provide > this wakeup can result in grace periods failing to start, which in turn > results in out-of-memory conditions. > > This race window is quite narrow, but it actually did happen during real > testing. It would of course need to be fixed even if it was strictly > theoretical in nature. > > [ backport for 4.19 commit 1d1f898df6586c5ea9aeaf349f13089c6fa37903 > upstream. ] Thanks for all of these, now queued up. greg k-h