All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com,
	bobby.prani@gmail.com
Subject: [PATCH v2 tip/core/rcu 0/22] CPU hotplug updates for v4.1
Date: Mon, 16 Mar 2015 11:37:43 -0700	[thread overview]
Message-ID: <20150316183743.GA21453@linux.vnet.ibm.com> (raw)

Hello!

This series updates RCU's handling of CPU hotplug offline operations,
allowing RCU to have a precise notification of when it should start
ignoring a CPU.  This allowed detection of some illegal use of RCU by
offline CPUs, and this series contains fixes for these.  A similar
problem exists for CPU onlining, but will be addressed later.  One
CPU-hotplug dragon at a time.

1.	Add common code for notification from dying CPU.  This is
	part of the fix for issues uncovered by improved detection,
	but is placed first to avoid messing up bisection.

2-4.	Use #1 for x86, blackfin, and metag.  (ARM also has this problem,
	but ARM's maintainers are working on their own fix.)

5.	Remove duplicate offline-CPU callback-list initialization.
	This simplifies later changes to RCU's handling of offlining
	operations.

6.	Improve code readability in rcu_cleanup_dead_cpu().  Simple
	code motion, no semantic change.

7.	Eliminate a boolean variable and "if" statement by rearranging
	sync_rcu_preempt_exp_init()'s checks for CPUs not having blocked
	tasks.

8.	Eliminate empty CONFIG_HOTPLUG_CPU #ifdef.

9.	Add diagnostics to detect when RCU CPU stall warnings have been
	caused by failure to propagate quiescent states up the rcu_node
	combining tree.

10.	Provide CONFIG_RCU_TORTURE_TEST_SLOW_INIT Kconfig option to
	artificially slow down grace-period initialization, thus increasing
	the probability of detecting races with this initialization process.

11.	Update data files to enable CONFIG_RCU_TORTURE_TEST_SLOW_INIT
	by default during rcutorture testing, but leave the default
	time at zero.  This default may be overridden by passing
	"--bootargs rcutree.gp_init_delay=1" to kvm.sh.

12.	Remove event tracing from rcu_cpu_notify(), which is invoked
	by offline CPUs.  (Event tracing uses RCU.)

13.	Change meaning of ->expmask bitmasks to track blocked tasks
	rather than online CPUs.

14.	Move rcu_report_unblock_qs_rnp() to common code.  This will
	make it easier to provide proper locking protection.

15.	Avoid races between CPU-hotplug operations and RCU grace-period
	initialization by processing CPU-hotplug changes only at the
	start of each grace period.  This works because RCU need not
	wait on a CPU that came online after the start of the current
	grace period.

16.	Eliminate the no-longer-needed ->onoff_mutex from the rcu_node
	structure.  This is the only sleeplock acquired during RCU's
	CPU-hotplug processing, which in turn allows rcu_cpu_notify()
	to be invoked from the preemption-disabled idle loop.

17.	Use a per-CPU variable to make the CPU-offline idle-loop
	transition point precise.  (RCU's magic one-jiffy grace-period
	wait for offline CPUs must remain until the analogous online
	issue is addressed.)

18.	Invoke rcu_cpu_notify() with a new CPU_DYING_IDLE op just before
	the idle-loop invocation of arch_cpu_idle_dead().

19.	Now that CPU-hotplug events are applied only during grace-period
	initialization, it is safe to unconditionally enable slow
	grace-period initialization for rcutorture testing.  Note
	that this delay is applied randomly in order to get a good
	mix of fast and slow grace-period initialization.

20.	Add checks that all quiescent states were received at grace-period
	cleanup time.

21.	Add a check for the last task on a given RCU-node structure
	leaving its RCU read-side critical section between the time
	that hotplug information is propagated up the tree and the
	time that the grace period starts.

22.	Add checks for grace-period number to all propagations of
	quiescent states up the rcu_node combining tree.  These are
	required because a new grace period could start during this
	propagation due to the resolution of #21 above.  (Thanks
	to Sasha Levin for exposing this bug during the course of
	his testing.)

Changes since v1:

o	Fixed per-CPU state mechine to work correctly for architectures
	that online CPUs without needing to check whether or not previous
	offline operations completed correctly and on time, thanks to
	James Hogan.

o	Fixed Xen's interfacing to the common-code notifications, thanks
	to Boris Ostrovsky.

o	Added two fixes for handling of quiescent states and grace periods
	given the updated handling of CPU hotplug.

							Thanx, Paul

------------------------------------------------------------------------

 b/Documentation/kernel-parameters.txt                     |    6 
 b/arch/blackfin/mach-common/smp.c                         |    6 
 b/arch/metag/kernel/smp.c                                 |    5 
 b/arch/x86/include/asm/cpu.h                              |    2 
 b/arch/x86/include/asm/smp.h                              |    2 
 b/arch/x86/kernel/smpboot.c                               |   39 -
 b/arch/x86/xen/smp.c                                      |   46 -
 b/include/linux/cpu.h                                     |   14 
 b/include/linux/rcupdate.h                                |    2 
 b/kernel/cpu.c                                            |    4 
 b/kernel/rcu/tree.c                                       |  356 ++++++++++----
 b/kernel/rcu/tree.h                                       |   11 
 b/kernel/rcu/tree_plugin.h                                |  169 +++---
 b/kernel/rcu/tree_trace.c                                 |    4 
 b/kernel/sched/idle.c                                     |    9 
 b/kernel/smpboot.c                                        |  156 ++++++
 b/lib/Kconfig.debug                                       |   26 -
 b/tools/testing/selftests/rcutorture/configs/rcu/CFcommon |    1 
 18 files changed, 617 insertions(+), 241 deletions(-)


             reply	other threads:[~2015-03-16 18:38 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-16 18:37 Paul E. McKenney [this message]
2015-03-16 18:37 ` [PATCH v2 tip/core/rcu 01/22] smpboot: Add common code for notification from dying CPU Paul E. McKenney
2015-03-16 18:37   ` Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 02/22] x86: Use common outgoing-CPU-notification code Paul E. McKenney
2015-03-16 18:37     ` Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 03/22] blackfin: " Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 05/22] rcu: Consolidate offline-CPU callback initialization Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 06/22] rcu: Put all orphan-callback-related code under same comment Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 07/22] rcu: Simplify sync_rcu_preempt_exp_init() Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 08/22] rcu: Eliminate empty HOTPLUG_CPU ifdef Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 09/22] rcu: Detect stalls caused by failure to propagate up rcu_node tree Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 10/22] rcu: Provide diagnostic option to slow down grace-period initialization Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 11/22] rcutorture: Enable slow grace-period initializations Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 12/22] rcu: Remove event tracing from rcu_cpu_notify(), used by offline CPUs Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 13/22] rcu: Rework preemptible expedited bitmask handling Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 14/22] rcu: Move rcu_report_unblock_qs_rnp() to common code Paul E. McKenney
2015-03-16 18:37   ` [PATCH v2 tip/core/rcu 15/22] rcu: Process offlining and onlining only at grace-period start Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 16/22] rcu: Eliminate ->onoff_mutex from rcu_node structure Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 17/22] cpu: Make CPU-offline idle-loop transition point more precise Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 18/22] rcu: Handle outgoing CPUs on exit from idle loop Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 19/22] rcutorture: Default to grace-period-initialization delays Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 20/22] rcu: Add diagnostics to grace-period cleanup Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 21/22] rcu: Yet another fix for preemption and CPU hotplug Paul E. McKenney
2015-03-16 18:38   ` [PATCH v2 tip/core/rcu 22/22] rcu: Associate quiescent-state reports with grace period Paul E. McKenney
     [not found]   ` <1426531086-23825-1-git-send-email-paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2015-03-16 18:37     ` [PATCH v2 tip/core/rcu 04/22] metag: Use common outgoing-CPU-notification code Paul E. McKenney
2015-03-16 18:37       ` Paul E. McKenney
2015-03-17  8:18     ` [PATCH v2 tip/core/rcu 01/22] smpboot: Add common code for notification from dying CPU Peter Zijlstra
2015-03-17  8:18       ` Peter Zijlstra
     [not found]       ` <20150317081807.GQ2896-IIpfhp3q70z/8w/KjCw3T+5/BudmfyzbbVWyRVo5IupeoWH0uzbU5w@public.gmane.org>
2015-03-17 11:36         ` Paul E. McKenney
2015-03-17 11:36           ` Paul E. McKenney
2015-03-17 14:08           ` Peter Zijlstra
2015-03-17 16:34             ` Paul E. McKenney
2015-03-17 16:56             ` Peter Zijlstra
     [not found]               ` <20150317165621.GF24151-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2015-03-17 17:32                 ` Paul E. McKenney
2015-03-17 17:32                   ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150316183743.GA21453@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=bobby.prani@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=dvhart@linux.intel.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.