Skip to content

RFC Preview of RCU changes for 3.3

Paul E. McKenney lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest28 patches 45 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/28powerpc: Strengthen value-returning-atomics memory barriersarch/powerpc/include/asm/synch.h+1 -50 replies
2/28rcu: ->signaled better named ->fqs_statekernel/rcutree.c kernel/rcutree.h kernel/rcutree_trace.c+11 -110 replies
3/28rcu: Avoid RCU-preempt expedited grace-period botchkernel/rcutree_plugin.h+5 -20 replies
4/28rcu: Make synchronize_sched_expedited() better at work sharingkernel/rcutree_plugin.h+1 -10 replies
5/28lockdep: Update documentation for lock-class leak detectionDocumentation/lockdep-design.txt+61 -04 replies
6/28rcu: Track idleness independent of idle tasksDocumentation/RCU/trace.txt include/linux/hardirq.h include/linux/rcupdate.h +7 more+297 -1540 replies
7/28trace: Allow ftrace_dump() to be called from moduleskernel/trace/trace.c+1 -00 replies
8/28rcu: Add failure tracing to rcutortureinclude/linux/rcupdate.h include/trace/events/rcu.h kernel/rcupdate.c +1 more+62 -00 replies
9/28rcu: Document failing tick as cause of RCU CPU stall warningDocumentation/RCU/stallwarn.txt+5 -02 replies
10/28rcu: Disable preemption in rcu_is_cpu_idle()kernel/rcutree.c+7 -30 replies
11/28rcu: Omit self-awaken when setting up expedited grace periodkernel/rcutree.c kernel/rcutree.h kernel/rcutree_plugin.h+14 -82 replies
12/28rcu: Detect illegal rcu dereference in extended quiescent stateinclude/linux/rcupdate.h kernel/rcupdate.c kernel/rcutiny.c +1 more+30 -00 replies
13/28rcu: Inform the user about extended quiescent state on PROVE_RCU warningkernel/lockdep.c+22 -00 replies
14/28rcu: Warn when rcu_read_lock() is used in extended quiescent stateinclude/linux/rcupdate.h+42 -100 replies
15/28rcu: Remove one layer of abstraction from PROVE_RCU checkinginclude/linux/rcupdate.h+8 -450 replies
16/28rcu: Warn when srcu_read_lock() is used in an extended quiescent stateinclude/linux/srcu.h+23 -130 replies
17/28rcu: Make srcu_read_lock_held() call common lockdep-enabled functioninclude/linux/srcu.h+4 -17 replies
18/28nohz: Separate out irq exit and idle loop dyntick logicarch/arm/kernel/process.c arch/avr32/kernel/process.c arch/blackfin/kernel/process.c +16 more+99 -770 replies
19/28nohz: Allow rcu extended quiescent state handling seperately from tick stoparch/arm/kernel/process.c arch/avr32/kernel/process.c arch/blackfin/kernel/process.c +15 more+90 -4911 replies
20/28x86: Enter rcu extended qs after idle notifier callarch/x86/kernel/process_64.c+8 -20 replies
21/28x86: Call idle notifier after irq_enter()arch/x86/kernel/apic/apic.c arch/x86/kernel/apic/io_apic.c arch/x86/kernel/cpu/mcheck/therm_throt.c +2 more+9 -90 replies
22/28rcu: Fix early call to rcu_idle_enter()kernel/softirq.c+1 -10 replies
23/28powerpc: Tell RCU about idle after hcall tracingarch/powerpc/kernel/idle.c arch/powerpc/platforms/pseries/lpar.c+18 -20 replies
24/28rcu: Introduce bulk reference countinclude/linux/srcu.h kernel/srcu.c+52 -111 replies
25/28rcu: Deconfuse dynticks entry-exit tracinginclude/trace/events/rcu.h kernel/rcu.h kernel/rcutiny.c +1 more+53 -320 replies
26/28rcu: Add more information to the wrong-idle-task complaintkernel/rcutiny.c kernel/rcutree.c+20 -40 replies
27/28rcu: Allow dyntick-idle mode for CPUs with callbackskernel/rcutree.c kernel/rcutree.h kernel/rcutree_plugin.h+132 -332 replies
28/28rcu: Fix idle-task checkskernel/rcutiny.c kernel/rcutree.c+4 -44 replies

Reviews trailers per patch

1 of 28 patches has a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchSrikar DronamrajuSteven RostedtWu FengguangJosh Triplett
SeriesR-b
1/28
2/28
3/28
4/28
5/28
6/28
7/28
8/28
9/28
10/28
11/28
12/28
13/28
14/28
15/28
16/28
17/28
18/28
19/28
20/28
21/28
22/28
23/28
24/28Requested-by T-b
25/28
26/28
27/28
28/28A-b T-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 4 reviewers.

Read the v1 thread

Cover letter [PATCH RFC tip/core/rcu 0/28] Preview of RCU changes for 3.3

Hello!

This patchset permits idle tasks to use RCU read-side critical sections, although they are still prohibited between tick_nohz_idle_exit_norcu() and tick_nohz_idle_exit_norcu(); makes synchronize_sched_expedited() better able to share work among concurrent callers, allows ftrace_dump() to be invoked from modules, dumps tracing upon detection of an rcutorture failure, detects illegal use of RCU read-side critical sections from extended quiescent states, legitimizes the pre-existin use of RCU in the idle notifiers, fixes a memory-barrier botch, introduces an SRCU-like bulk reference count, improve dynticks entry/exit tracing, further improves RCU's ability to allow a given CPU to enter dyntick-idle mode quickly, fixes idle-task checks, updates documentation, and additional fixes from a still-ongoing top-to-bottom inspection of RCU. The patches are as follows:

1. Strengthen memory barriers used in PowerPC value-returning
atomics and locking primitives. It is likely that this commit will be superseded by something from the powerpc maintainers. The need for this strengthening was validated by tooling from Peter Sewell's group at the University of Cambridge.
2. Rename ->signaled to ->fqs_state to clarify the code.
3. Fix a race that could permit RCU-preempt expedited grace
periods to complete too soon.
4. Improve synchronize_sched_expedited()'s ability to share work
among concurrent callers.
5. Document the troubleshooting of lockdep lock-class leaks.
6. Explicitly track idleness, which is a step towards permitting
the idle tasks to contain RCU read-side critical sections (but only outside the body of the idle loop).
7,8. Add an EXPORT_SYMBOL_GPL() for ftrace_dump() so that
rcutorture can dump the trace buffer upon detection of an error, and then make rcutorture do the dumping.
9. Document a failing scheduling-clock tick as yet another
possible cause of RCU CPU stall warnings.
10. Disable preemption in rcu_is_cpu_idle() in order to prevent
spurious lockdep-RCU splats.
11. Remove a useless self-awaken when setting up expedited grace
periods, courtesy of Thomas Gleixner and the -rt effort.
12-17. Make lockdep-RCU warn when RCU read-side primitives are
invoked from an idle RCU extended quiescent state, mostly courtesy of Frederic Weisbecker.
18-23. Separate out the scheduler-clock tick's idea of dyntick
idle from RCU's notion of an idle extended quiescent state, mostly courtesy of Frederic Weisbecker. These commits are needed for Frederic's work to suppress the scheduler-clock tick when there is but one runnable task on a given CPU.
24. Introduce a bulk reference count, which is related to SRCU,
but which allows a reference to be acquired in an irq handler and released by the task that was interrupted.
25-26. Improve dyntick-idle tracing and diagnostics.
27. Allow CPUs with pending RCU callbacks to enter dyntick-idle
mode. Beware this commit, as it compiled and passed rcutorture on the first try, which historically has indicated the presence of subtle and highly destructive bugs.
28. Fix RCU's determination of whether or not it is running in the
context of an idle task.

For a testing-only version of this patchset from git, please see the following subject-to-rebase branch:

git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git rcu/dev

Thanx, Paul

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

 arch/arm/kernel/process.c                  |    4 
 arch/avr32/kernel/process.c                |    4 
 arch/blackfin/kernel/process.c             |    4 
 arch/microblaze/kernel/process.c           |    4 
 arch/mips/kernel/process.c                 |    4 
 arch/openrisc/kernel/idle.c                |    4 
 arch/powerpc/kernel/idle.c                 |   20 +
 arch/powerpc/platforms/iseries/setup.c     |    8 
 arch/s390/kernel/process.c                 |    4 
 arch/sh/kernel/idle.c                      |    4 
 arch/sparc/kernel/process_64.c             |    4 
 arch/tile/kernel/process.c                 |    4 
 arch/um/kernel/process.c                   |    4 
 arch/unicore32/kernel/process.c            |    4 
 arch/x86/kernel/process_32.c               |    4 
 arch/x86/kernel/process_64.c               |   14 -
 b/Documentation/RCU/stallwarn.txt          |    5 
 b/Documentation/RCU/trace.txt              |    4 
 b/Documentation/lockdep-design.txt         |   61 +++++
 b/arch/arm/kernel/process.c                |    4 
 b/arch/avr32/kernel/process.c              |    4 
 b/arch/blackfin/kernel/process.c           |    4 
 b/arch/microblaze/kernel/process.c         |    4 
 b/arch/mips/kernel/process.c               |    4 
 b/arch/openrisc/kernel/idle.c              |    4 
 b/arch/powerpc/include/asm/synch.h         |    6 
 b/arch/powerpc/kernel/idle.c               |    4 
 b/arch/powerpc/platforms/iseries/setup.c   |    8 
 b/arch/powerpc/platforms/pseries/lpar.c    |    4 
 b/arch/s390/kernel/process.c               |    4 
 b/arch/sh/kernel/idle.c                    |    4 
 b/arch/sparc/kernel/process_64.c           |    4 
 b/arch/tile/kernel/process.c               |    4 
 b/arch/um/kernel/process.c                 |    4 
 b/arch/unicore32/kernel/process.c          |    4 
 b/arch/x86/kernel/apic/apic.c              |    6 
 b/arch/x86/kernel/apic/io_apic.c           |    2 
 b/arch/x86/kernel/cpu/mcheck/therm_throt.c |    2 
 b/arch/x86/kernel/cpu/mcheck/threshold.c   |    2 
 b/arch/x86/kernel/irq.c                    |    6 
 b/arch/x86/kernel/process_32.c             |    4 
 b/arch/x86/kernel/process_64.c             |    4 
 b/include/linux/hardirq.h                  |   21 --
 b/include/linux/rcupdate.h                 |   21 --
 b/include/linux/srcu.h                     |   36 ++-
 b/include/linux/tick.h                     |   11 -
 b/include/trace/events/rcu.h               |   10 
 b/kernel/lockdep.c                         |   22 ++
 b/kernel/rcu.h                             |    7 
 b/kernel/rcupdate.c                        |   10 
 b/kernel/rcutiny.c                         |  124 ++++++++++--
 b/kernel/rcutorture.c                      |   18 +
 b/kernel/rcutree.c                         |   16 -
 b/kernel/rcutree.h                         |    4 
 b/kernel/rcutree_plugin.h                  |    7 
 b/kernel/rcutree_trace.c                   |    2 
 b/kernel/softirq.c                         |    2 
 b/kernel/srcu.c                            |    3 
 b/kernel/time/tick-sched.c                 |    6 
 b/kernel/trace/trace.c                     |    1 
 include/linux/rcupdate.h                   |  139 ++++++++-----
 include/linux/srcu.h                       |   55 +++++
 include/linux/tick.h                       |   59 ++++-
 include/trace/events/rcu.h                 |   41 +++
 kernel/rcupdate.c                          |    2 
 kernel/rcutiny.c                           |   45 ++--
 kernel/rcutree.c                           |  298 ++++++++++++++++++++---------
 kernel/rcutree.h                           |   22 --
 kernel/rcutree_plugin.h                    |  175 +++++++++++++----
 kernel/rcutree_trace.c                     |   10 
 kernel/softirq.c                           |    2 
 kernel/time/tick-sched.c                   |  118 ++++++-----
 72 files changed, 1080 insertions(+), 467 deletions(-)