Skip to content

Preview of RCU changes for 3.2

Paul E. McKenney linuxppc-dev lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest55 patches 42 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/55rcu: Use kthread_create_on_node()kernel/rcutorture.c kernel/rcutree_plugin.h+7 -30 replies
2/55rcu: Avoid unnecessary self-wakeup of per-CPU kthreadskernel/rcutree_plugin.h+3 -50 replies
3/55rcu: Update documentation to flag RCU_BOOST trace informationDocumentation/RCU/trace.txt+4 -00 replies
4/55rcu: Restore checks for blocking in RCU read-side critical sectionsinclude/linux/lockdep.h include/linux/rcupdate.h kernel/lockdep.c +2 more+75 -450 replies
5/55rcu: Move rcu_head definition to types.hinclude/linux/rcupdate.h include/linux/types.h+11 -102 replies
6/55rcu: Update rcutorture documentationDocumentation/RCU/torture.txt+99 -350 replies
7/55rcu: Fix mismatched variable in rcutree_trace.ckernel/rcutree_trace.c+1 -10 replies
8/55rcu: Abstract common code for RCU grace-period-wait primitivesinclude/linux/rcupdate.h include/linux/rcutiny.h include/linux/rcutree.h +5 more+113 -1310 replies
9/55rcu: Catch rcutorture up to new RCU API additionsDocumentation/RCU/torture.txt kernel/rcutorture.c+24 -340 replies
10/55rcu: Fix RCU's NMI documentationDocumentation/RCU/NMI-RCU.txt+1 -10 replies
11/55rcu: Drive configuration directly from SMP and PREEMPTinit/Kconfig+3 -30 replies
12/55rcu: Fix pathnames in documentationDocumentation/RCU/NMI-RCU.txt+2 -20 replies
13/55rcu: Don't destroy rcu_torture_boost() callback until it is donekernel/rcutorture.c+1 -10 replies
14/55rcu: Add event-tracing for RCU callback invocationinclude/linux/rcupdate.h include/trace/events/rcu.h kernel/rcu.h +3 more+219 -540 replies
15/55rcu: Event-trace markers for computing RCU CPU utilizationinclude/trace/events/rcu.h kernel/rcutree.c+68 -210 replies
16/55rcu: Put names into TINY_RCU structures under RCU_TRACEkernel/rcu.h kernel/rcutiny.c kernel/rcutiny_plugin.h +2 more+18 -270 replies
17/55rcu: Add RCU type to callback-invocation tracinginclude/trace/events/rcu.h kernel/rcutiny.c kernel/rcutree.c+26 -180 replies
18/55rcu: Update comments to reflect softirqs vs. kthreadskernel/rcutree.c kernel/rcutree_plugin.h+14 -120 replies
19/55rcu: Move RCU_BOOST declarations to allow compiler checkingkernel/rcutree.h kernel/rcutree_trace.c+7 -50 replies
20/55rcu: Add event-trace markers to TREE_RCU kthreadsinclude/trace/events/rcu.h kernel/rcutree_plugin.h+15 -00 replies
21/55rcu: Make TINY_RCU also use softirq for RCU_BOOST=ninclude/linux/rcutiny.h kernel/rcutiny.c kernel/rcutiny_plugin.h+97 -910 replies
22/55rcu: Add grace-period, quiescent-state, and call_rcu trace eventsinclude/trace/events/rcu.h kernel/rcu.h kernel/rcutiny.c +3 more+399 -242 replies
23/55rcu: Simplify quiescent-state accountingDocumentation/RCU/trace.txt kernel/rcutree.c kernel/rcutree.h +2 more+49 -490 replies
24/55rcu: Not necessary to pass rcu_read_lock_held() to rcu_dereference_protected()Documentation/RCU/lockdep.txt+4 -60 replies
25/55rcu: Update documentation for additional RCU lockdep functionsDocumentation/RCU/lockdep.txt+21 -30 replies
26/55rcu: Remove unused and redundant interfacesinclude/linux/rcupdate.h+0 -200 replies
27/55rcu: Allow rcutorture's stat_interval parameter to be changed at runtimekernel/rcutorture.c+1 -10 replies
28/55rcu: Document interpretation of RCU-lockdep splatsDocumentation/RCU/lockdep-splat.txt+110 -00 replies
29/55nohz: Remove nohz_cpu_maskinclude/linux/sched.h kernel/sched.c kernel/time/tick-sched.c+0 -180 replies
30/55rcu: Eliminate in_irq() checks in rcu_enter_nohz()kernel/rcutree.c+0 -70 replies
31/55rcu: Make rcu_implicit_dynticks_qs() locals be correct sizekernel/rcutree.c+5 -52 replies
32/55rcu: Make rcu_assign_pointer() unconditionally insert a memory barrierinclude/linux/rcupdate.h+1 -30 replies
33/55rcu: Improve rcu_assign_pointer() and RCU_INIT_POINTER() documentationinclude/linux/rcupdate.h+40 -70 replies
34/55rcu: Move __rcu_read_unlock()'s barrier() within if-statementinclude/linux/rcupdate.h kernel/rcutree_plugin.h+3 -130 replies
35/55rcu: Dump local stack if cannot dump all CPUs' stackskernel/rcutree.c+4 -20 replies
36/55rcu: Prevent early boot set_need_resched() from __rcu_pending()kernel/rcutree.c+2 -12 replies
37/55rcu: Simplify unboosting checksinclude/linux/sched.h kernel/rcutree_plugin.h+10 -130 replies
38/55rcu: Prohibit grace periods during early bootkernel/rcutree.c+5 -21 reply
39/55rcu: Suppress NMI backtraces when stall ends before dumpkernel/rcutree.c kernel/rcutree.h kernel/rcutree_plugin.h+19 -90 replies
40/55rcu: Avoid having just-onlined CPU resched itself when RCU is idlekernel/rcutree.c+8 -30 replies
41/55rcu: Permit rt_mutex_unlock() with irqs disabledkernel/rcutree_plugin.h kernel/rtmutex.c+14 -04 replies
42/55rcu: Make rcu_torture_fqs() exit loops at end of testkernel/rcutorture.c+6 -42 replies
43/55rcu: Make rcu_torture_boost() exit loops at end of testkernel/rcutorture.c+2 -10 replies
44/55rcu: wire up RCU_BOOST_PRIO for rcutreekernel/rcutree.c kernel/rcutree_plugin.h+15 -75 replies
45/55rcu: check for entering dyntick-idle mode while in read-side critical sectioninclude/linux/rcupdate.h kernel/rcutree.c+6 -00 replies
46/55rcu: Remove rcu_needs_cpu_flush() to avoid false quiescent stateskernel/rcutree.c kernel/rcutree.h kernel/rcutree_plugin.h+0 -290 replies
47/55rcu: Move propagation of ->completed from rcu_start_gp() to rcu_report_qs_rsp()kernel/rcutree.c+51 -200 replies
48/55powerpc: strengthen value-returning-atomics memory barriersarch/powerpc/include/asm/synch.h+1 -53 replies
49/55rcu: Detect illegal rcu dereference in extended quiescent stateinclude/linux/rcupdate.h kernel/rcupdate.c kernel/rcutiny.c +1 more+82 -10 replies
50/55rcu: Inform the user about dynticks-idle mode on PROVE_RCU warningkernel/lockdep.c+20 -00 replies
51/55rcu: Warn when rcu_read_lock() is used in extended quiescent stateinclude/linux/rcupdate.h+42 -100 replies
52/55rcu: Remove one layer of abstraction from PROVE_RCU checkinginclude/linux/rcupdate.h+8 -450 replies
53/55rcu: Warn when srcu_read_lock() is used in an extended quiescent stateinclude/linux/srcu.h+15 -103 replies
54/55rcu: Make srcu_read_lock_held() call common lockdep-enabled functioninclude/linux/srcu.h+4 -12 replies
55/55powerpc: Work around tracing from dyntick-idle modearch/powerpc/platforms/pseries/lpar.c+6 -07 replies

Reviews trailers per patch

4 of 55 patches have a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchDavid S. MillerMathieu DesnoyersOlof JohanssonJosh Triplett
SeriesR-b
1/55
2/55
3/55
4/55
5/55A-b
6/55
7/55
8/55
9/55
10/55A-b
11/55
12/55
13/55
14/55
15/55
16/55
17/55
18/55
19/55
20/55
21/55
22/55
23/55
24/55
25/55
26/55
27/55
28/55
29/55
30/55
31/55
32/55A-b
33/55
34/55
35/55
36/55
37/55
38/55
39/55
40/55
41/55
42/55
43/55
44/55
45/55
46/55
47/55
48/55A-b
49/55
50/55
51/55
52/55
53/55
54/55
55/55

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 tip/core/rcu 0/55] Preview of RCU changes for 3.2

Hello!

This patchset adds RCU event tracing, improved diagnostics and documentation, and fixes a number of bugs, including several from an ongoing top-to-bottom inspection of RCU. The patches are as follows:

1. Place per-CPU kthreads' stack and task struct on the corresponding
node on NUMA systems (courtesy of Eric Dumazet).
2. Avoid unnecessary self-wakeups for per-CPU kthreads
(courtesy of Shaohua Li).
3,6,10,12,25,28,33.
Documentations updates (some courtesy Wanlong Gao).
4. Add replacement checks for blocking within an RCU read-side
critical section.
5. Header-file untangling part 1 of N: move rcu_head to types.h.
7. Fix mismatched variable declaration (courtesy of Andi Kleen).
8. Abstract out common grace-period-primitive code.
9. Update rcutorture to test newish RCU API members.
11. Drive RCU algorithm selection directly from SMP and PREEMPT.
13. Make rcu_torture_boost() wait for callbacks before telling
debug-objects that they are done.
14-17,20,22.
Add event tracing for RCU.
18. Update comments to reflect kthreads being used only when
RCU priority boosting is enabled.
19. Move RCU_BOOSt data declarations to alow compiler to detect
mismatches.
20. Make TINY_RCU use softirqs for RCU_BOOST=n.
23. Simplify quiescent-state accounting.
24. Stop passing rcu_read_lock_held() to rcu_dereference_protected()
(courtesy of Michal Hocko).
26. Remove unused and redundant RCU API members.
27. Allow rcutorture's stat_interval parameter to be changed at runtime
to make it easier to test RCU in guest OSes.
28. Removed unused nohz_cpu_mask (courtesy of Alex Shi).
30. Eliminate in_irq() checks in rcu_enter_nohz().
31. Fix rcu_implicit_dynticks_qs() local-variable size mismatches.
32. Make rcu_assign_pointer() unconditionally emit memory barrier
to silence new gcc warnings (courtesy of Eric Dumazet).
34. Move __rcu_read_lock()'s barrier within if-statement.
35. Dump local stack for CPU stall warnings if cannot dump all stacks.
36. Prevent early-boot set_need_resched() from __rcu_pending().
37. Simplify unboosting checks.
38. Prohibit RCU grace periods during early boot.
39. Suppress NMI backtraces when CPU stall ends before dump.
40. Avoid just-online CPU needlessly rescheding itself.
41. Permit rt_mutex_unlock() with irqs disabled.
42-43. Prevent end-of-test rcutorture hangs.
44. Wire up RCU_BOOST_PRIO, use conventional kthread naming scheme
(courtesy of Mike Galbraith).
45. Check for entering dyntick-idle in RCU read-side critical section.
46. Adjust RCU_FAST_NO_HZ to avoid false quiescent states.
47. Avoid concurrent end of old GP with start of new GP.
48. Strengthen powerpc value-returning atomic memory ordering.
49-51. Detect illegal RCU use from dyntick-idle mode (courtesy of
Frederic Weisbecker).
52. Remove an unnecessary layer of abstraction from PROVE_RCU checking.
53. Detect illegal SRCU use from dyntick-idle mode.
54. Make SRCU use common lockdep-splat code.
55. Placeholder patch that disables illegal tracing from dyntick-idle
mode (illegal because tracing uses RCU).

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

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

Thanx, Paul

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

 Documentation/RCU/NMI-RCU.txt           |    4 
 Documentation/RCU/lockdep.txt           |   24 +
 Documentation/RCU/torture.txt           |    3 
 Documentation/RCU/trace.txt             |   34 +-
 b/Documentation/RCU/NMI-RCU.txt         |    2 
 b/Documentation/RCU/lockdep-splat.txt   |  110 +++++++
 b/Documentation/RCU/lockdep.txt         |   10 
 b/Documentation/RCU/torture.txt         |  134 +++++++--
 b/Documentation/RCU/trace.txt           |    4 
 b/arch/powerpc/include/asm/synch.h      |    6 
 b/arch/powerpc/platforms/pseries/lpar.c |    6 
 b/include/linux/lockdep.h               |    2 
 b/include/linux/rcupdate.h              |   28 +
 b/include/linux/rcutiny.h               |   16 +
 b/include/linux/rcutree.h               |    2 
 b/include/linux/sched.h                 |    1 
 b/include/linux/srcu.h                  |   25 +
 b/include/linux/types.h                 |   10 
 b/include/trace/events/rcu.h            |   98 ++++++
 b/init/Kconfig                          |    6 
 b/kernel/lockdep.c                      |   84 +++--
 b/kernel/pid.c                          |    4 
 b/kernel/rcu.h                          |   79 +++++
 b/kernel/rcupdate.c                     |   21 +
 b/kernel/rcutiny.c                      |   28 -
 b/kernel/rcutiny_plugin.h               |   14 
 b/kernel/rcutorture.c                   |    5 
 b/kernel/rcutree.c                      |   22 -
 b/kernel/rcutree.h                      |    7 
 b/kernel/rcutree_plugin.h               |    5 
 b/kernel/rcutree_trace.c                |    2 
 b/kernel/rtmutex.c                      |    8 
 b/kernel/sched.c                        |    2 
 b/kernel/time/tick-sched.c              |    6 
 include/linux/rcupdate.h                |  420 ++++++++++++++---------------
 include/linux/rcutiny.h                 |    4 
 include/linux/sched.h                   |    3 
 include/linux/srcu.h                    |    5 
 include/trace/events/rcu.h              |  449 ++++++++++++++++++++++++++++----
 kernel/lockdep.c                        |   20 +
 kernel/rcu.h                            |   16 -
 kernel/rcupdate.c                       |   22 +
 kernel/rcutiny.c                        |  139 +++------
 kernel/rcutiny_plugin.h                 |  120 ++++++--
 kernel/rcutorture.c                     |   72 ++---
 kernel/rcutree.c                        |  313 +++++++++++++++-------
 kernel/rcutree.h                        |   10 
 kernel/rcutree_plugin.h                 |  150 +++++-----
 kernel/rcutree_trace.c                  |   13 
 kernel/sched.c                          |   11 
 50 files changed, 1761 insertions(+), 818 deletions(-)