lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 2 Jun 2015 08:31:53 +0200
From:	Ingo Molnar <mingo@...nel.org>
To:	"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Cc:	linux-kernel@...r.kernel.org, will.deacon@....com,
	milos@...hat.com, joe@...ches.com, pdaly@...eaurora.org,
	nicolas.iooss_linux@....org, hofrat@...dl.org,
	ying.xue@...driver.com, paul.gortmaker@...driver.com,
	bobby.prani@...il.com, alexey.kodanev@...cle.com
Subject: Re: [GIT PULL rcu/next] RCU commits for 4.2


* Paul E. McKenney <paulmck@...ux.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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ