Re: [GIT RFC PULL rcu/urgent] Make RCU synchronous grace periods work throughout boot

From: Ingo Molnar
Date: Mon Jan 16 2017 - 01:51:35 EST



* Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> wrote:

> Hello, Ingo,
>
> This series contains a pair of commits that permit RCU synchronous grace
> periods (synchronize_rcu() and friends) to work correctly throughout boot.
> This eliminates the current "dead time" starting when the scheduler spawns
> its first taks and ending when the last of RCU's kthreads is spawned
> (this last happens during early_initcall() time). Although RCU's
> synchronous grace periods have long been documented as not working
> during this time, prior to 4.9, the expedited grace periods worked by
> accident, and some ACPI code came to rely on this unintentional behavior.
> (Note that this unintentional behavior was -not- reliable. For example,
> failures from ACPI could occur on !SMP systems and on systems booting
> with the rcu_normal kernel boot parameter.)
>
> Either way, there is a bug that needs fixing, and the 4.9 switch of RCU's
> expedited grace periods to workqueues could be considered to have caused
> a regression. This series therefore makes RCU's expedited grace periods
> operate correctly throughout the boot process. This has been demonstrated
> to fix the problems ACPI was encountering, and has the added longer-term
> benefit of simplifying RCU's behavior. I am therefore submitting this
> RFC pull request for your consideration despite it being rather late in
> the 4.10 process.
>
> Please see the commit log of 52d7e48b86fc ("rcu: Narrow early boot
> window of illegal synchronous grace periods") for more information on
> the regression and the fix to RCU.
>
> The following changes since commit a121103c922847ba5010819a3f250f1f7fc84ab8:
>
> Linux 4.10-rc3 (2017-01-08 14:18:17 -0800)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git rcu/urgent
>
> for you to fetch changes up to 52d7e48b86fc108e45a656d8e53e4237993c481d:
>
> rcu: Narrow early boot window of illegal synchronous grace periods (2017-01-14 21:23:48 -0800)
>
> ----------------------------------------------------------------
> Paul E. McKenney (2):
> rcu: Remove cond_resched() from Tiny synchronize_sched()
> rcu: Narrow early boot window of illegal synchronous grace periods
>
> include/linux/rcupdate.h | 4 ++++
> kernel/rcu/rcu.h | 1 +
> kernel/rcu/tiny.c | 4 ----
> kernel/rcu/tiny_plugin.h | 9 +++++++--
> kernel/rcu/tree.c | 33 ++++++++++++++++++------------
> kernel/rcu/tree_exp.h | 52 ++++++++++++++++++++++++++++++++++++++----------
> kernel/rcu/tree_plugin.h | 2 +-
> kernel/rcu/update.c | 38 +++++++++++++++++++++++++++--------
> 8 files changed, 104 insertions(+), 39 deletions(-)

Pulled into tip:rcu/urgent, thanks a lot Paul! I'll get this to Linus ASAP.

Ingo