Re: [GIT PULL rcu/next] RCU commits for 4.2

From: Ingo Molnar
Date: Tue Jun 02 2015 - 02:32:13 EST



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

> Hello, Ingo,
>
> The changes in this series include the following:
>
> 1. Remove all uses of RCU-protected array indexes. These were posted
> to LKML at https://lkml.org/lkml/2015/5/12/827.
>
> 2. Documentation updates. These were posted to LKML at
> https://lkml.org/lkml/2015/5/12/848.
>
> 3. Miscellaneous fixes. These were posted to LKML at
> https://lkml.org/lkml/2015/5/12/876.
>
> 4. CPU-hotplug updates. These were posted to LKML at
> https://lkml.org/lkml/2015/5/12/880.
>
> 5. Initialization/Kconfig updates. These were posted to LKML at
> https://lkml.org/lkml/2015/5/12/918, however, the updates to
> Tree RCU's initialization have been deferred to 4.3.
>
> 6. Updates to Tiny RCU. These were posted to LKML at
> https://lkml.org/lkml/2015/5/12/957.
>
> 7. Torture-testing updates. These were posted to LKML at
> https://lkml.org/lkml/2015/5/12/964.
>
> All of these changes have been subjected to -next testing, and are
> available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git for-mingo
>
> for you to fetch changes up to 0868aa22167d93dd974c253d259c3e6fd47a16c8:
>
> Merge branches 'array.2015.05.27a', 'doc.2015.05.27a', 'fixes.2015.05.27a', 'hotplug.2015.05.27a', 'init.2015.05.27a', 'tiny.2015.05.27a' and 'torture.2015.05.27a' into HEAD (2015-05-27 13:00:49 -0700)
>
> ----------------------------------------------------------------
>
> Alexey Kodanev (1):
> locktorture: fix deadlock in 'rw_lock_irq' type
>
> Joe Perches (1):
> rcu: tree_plugin: Use bool function return values of true/false not 1/0
>
> Milos Vyletel (1):
> documentation: State that rcu_dereference() reloads pointer
>
> Nicholas Mc Guire (1):
> rcu: Change function declaration to bool
>
> Nicolas Iooss (1):
> rcu: Make rcu_*_data variables static
>
> Patrick Daly (1):
> rcu: Fix missing task information during rcu-preempt stall
>
> Paul E. McKenney (51):
> rcu: Convert ACCESS_ONCE() to READ_ONCE() and WRITE_ONCE()
> mce: Stop using array-index-based RCU primitives
> rcu: Eliminate array-index-based RCU primitives
> documentation: RCU-protected array indexes no longer supported
> mce: mce_chrdev_write() can be static
> documentation: Update rcu_dereference.txt based on WG21 discussions
> rcu: Convert from rcu_preempt_state to *rcu_state_p
> rcu: Eliminate a few RCU_BOOST #ifdefs in favor of IS_ENABLED()
> rcu: Tell the compiler that rcu_state_p is immutable
> rcu: Create an immutable rcu_data_p pointer to default rcu_data structure
> rcu: Eliminate a few CONFIG_RCU_NOCB_CPU_ALL #ifdefs
> rcu: Force wakeup of rcu_gp_kthread at grace-period end
> powerpc: Fix smp_mb__before_spinlock()
> rcu: Add more debug info on "kthread starved" RCU CPU stall warnings
> smp: Make control dependencies work on Alpha, improve documentation
> rcu: Make synchronize_sched_expedited() call wait_rcu_gp()
> rcu: Eliminate HOTPLUG_CPU #ifdef in favor of IS_ENABLED()
> rcu: Adjust ->lock acquisition for tasks no longer migrating
> rcu: Remove dead code from force_qs_rnp()
> rcu: Remove redundant offline check
> rcu: Correctly initialize ->rcu_qs_ctr_snap at online time
> cpu: Handle smpboot_unpark_threads() uniformly
> rcu: Modulate grace-period slow init to normalize delay
> rcu: Shut up spurious gcc uninitialized-variable warning
> rcu: Provide diagnostic option to slow down grace-period scans
> rcu: Directly drive TASKS_RCU from Kconfig
> rcu: Directly drive RCU_USER_QS from Kconfig
> rcu: Convert CONFIG_RCU_FANOUT_EXACT to boot parameter
> rcu: Enable diagnostic dump of rcu_node combining tree
> rcu: Create RCU_EXPERT Kconfig and hide booleans behind it
> rcu: Break dependency of RCU_FANOUT_LEAF on RCU_FANOUT
> rcu: Make RCU able to tolerate undefined CONFIG_RCU_FANOUT
> rcu: Make RCU able to tolerate undefined CONFIG_RCU_FANOUT_LEAF
> rcu: Make RCU able to tolerate undefined CONFIG_RCU_KTHREAD_PRIO
> rcu: Conditionally compile RCU's eqs warnings
> rcu: Further shrink Tiny RCU by making empty functions static inlines
> rcutorture: Test both RCU-sched and RCU-bh for Tiny RCU
> rcu: Correctly handle non-empty Tiny RCU callback list with none ready
> rcutorture: Exchange TREE03 and TREE04 geometries
> rcutorture: Exchange TREE03 and TREE08 NR_CPUS, speed up CPU hotplug
> rcutorture: Allow negative values of nreaders to oversubscribe
> locktorture: Change longdelay_us to longdelay_ms
> rcutorture: Replace barriers with smp_store_release() and smp_load_acquire()
> rcutorture: Test SRCU cleanup code path
> rcutorture: TASKS_RCU set directly, so don't explicitly set it
> rcutorture: Update configuration fragments for rcutree.rcu_fanout_exact
> rcutorture: Make rcutorture scripts force RCU_EXPERT
> rcutorture: Update TREE_RCU-kconfig.txt
> rcutorture: Display "make oldconfig" errors
> rcutorture: Allow repetition factors in Kconfig-fragment lists
> Merge branches 'array.2015.05.27a', 'doc.2015.05.27a', 'fixes.2015.05.27a', 'hotplug.2015.05.27a', 'init.2015.05.27a', 'tiny.2015.05.27a' and 'torture.2015.05.27a' into HEAD
>
> Paul Gortmaker (1):
> cpu: Remove new instance of __cpuinit that crept back in
>
> Pranith Kumar (1):
> rcu: Remove prompt for RCU implementation
>
> Will Deacon (1):
> documentation: memory-barriers: Fix smp_mb__before_spinlock() semantics
>
> Ying Xue (1):
> rculist: Fix another sparse warning
>
> Documentation/RCU/arrayRCU.txt | 20 +-
> Documentation/RCU/lockdep.txt | 10 -
> Documentation/RCU/rcu_dereference.txt | 38 +--
> Documentation/RCU/whatisRCU.txt | 6 +-
> Documentation/kernel-parameters.txt | 33 +-
> Documentation/memory-barriers.txt | 62 ++--
> arch/powerpc/include/asm/barrier.h | 1 +
> arch/x86/kernel/cpu/mcheck/mce.c | 15 +-
> include/linux/compiler.h | 16 +
> include/linux/rculist.h | 10 +-
> include/linux/rcupdate.h | 70 +---
> include/linux/rcutiny.h | 16 +
> include/linux/rcutree.h | 7 +-
> include/linux/spinlock.h | 2 +-
> init/Kconfig | 72 ++--
> kernel/cpu.c | 4 +-
> kernel/events/ring_buffer.c | 2 +-
> kernel/locking/locktorture.c | 14 +-
> kernel/rcu/rcutorture.c | 103 ++++--
> kernel/rcu/srcu.c | 10 +-
> kernel/rcu/tiny.c | 38 +--
> kernel/rcu/tiny_plugin.h | 12 +-
> kernel/rcu/tree.c | 365 ++++++++++++---------
> kernel/rcu/tree.h | 35 +-
> kernel/rcu/tree_plugin.h | 216 ++++++------
> kernel/rcu/tree_trace.c | 6 +-
> kernel/rcu/update.c | 30 +-
> kernel/torture.c | 26 +-
> lib/Kconfig.debug | 66 +++-
> .../testing/selftests/rcutorture/bin/configinit.sh | 2 +-
> .../selftests/rcutorture/bin/kvm-recheck.sh | 4 +
> tools/testing/selftests/rcutorture/bin/kvm.sh | 25 +-
> .../selftests/rcutorture/configs/rcu/CFcommon | 2 +
> .../selftests/rcutorture/configs/rcu/SRCU-N | 1 +
> .../selftests/rcutorture/configs/rcu/SRCU-P | 1 +
> .../selftests/rcutorture/configs/rcu/SRCU-P.boot | 2 +-
> .../selftests/rcutorture/configs/rcu/TASKS01 | 5 +-
> .../selftests/rcutorture/configs/rcu/TASKS02 | 1 -
> .../selftests/rcutorture/configs/rcu/TASKS03 | 2 +-
> .../selftests/rcutorture/configs/rcu/TINY02 | 2 +-
> .../selftests/rcutorture/configs/rcu/TINY02.boot | 1 +
> .../selftests/rcutorture/configs/rcu/TREE01 | 1 +
> .../selftests/rcutorture/configs/rcu/TREE02 | 2 +-
> .../selftests/rcutorture/configs/rcu/TREE02-T | 1 -
> .../selftests/rcutorture/configs/rcu/TREE03 | 8 +-
> .../selftests/rcutorture/configs/rcu/TREE03.boot | 1 +
> .../selftests/rcutorture/configs/rcu/TREE04 | 8 +-
> .../selftests/rcutorture/configs/rcu/TREE05 | 4 +-
> .../selftests/rcutorture/configs/rcu/TREE06 | 4 +-
> .../selftests/rcutorture/configs/rcu/TREE06.boot | 1 +
> .../selftests/rcutorture/configs/rcu/TREE07 | 4 +-
> .../selftests/rcutorture/configs/rcu/TREE08 | 6 +-
> .../selftests/rcutorture/configs/rcu/TREE08-T | 1 -
> .../selftests/rcutorture/configs/rcu/TREE08-T.boot | 1 +
> .../selftests/rcutorture/configs/rcu/TREE08.boot | 1 +
> .../selftests/rcutorture/configs/rcu/TREE09 | 1 +
> .../selftests/rcutorture/doc/TREE_RCU-kconfig.txt | 36 +-
> 57 files changed, 809 insertions(+), 624 deletions(-)
> create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE03.boot
> create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/TREE08-T.boot

Pulled, thanks a lot Paul!

I am wondering about the following small detail. You have reworked the whole RCU
Kconfig machinery with the introduction of RCU_EXPERT and smart selection of
defaults. (very nice!)

There's a single interactive option left when a user configures RCU 'anew' and
keeps CONFIG_RCU_EXPERT disabled:

Offload RCU callback processing from boot-selected CPUs (RCU_NOCB_CPU) [N/y/?] (NEW)

I'm wondering whether we could put this behind CONFIG_RCU_EXPERT as well, and
disable it by default?

The argument for this is very simple IMHO: NO_HZ_FULL depends on nocb_cpu support,
and actually selects it, so there's no way to misconfigure it.

Without NO_HZ_FULL it might still make sense to use nocb_cpu, but it's very much
an advanced, expert option.

With this change we could make RCU essentially configuration free in the common
case! :-)

Thanks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/