Messages in this thread | | | Date | Tue, 2 Jun 2015 08:31:53 +0200 | From | Ingo Molnar <> | Subject | Re: [GIT PULL rcu/next] RCU commits for 4.2 |
| |
* Paul E. McKenney <paulmck@linux.vnet.ibm.com> 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
| |