Skip to content

RCU ->gp_seq conversion for v4.19

Paul E. McKenney lkml 1 version New

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest40 patches 0 repliesNew

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/40rcu: Introduce grace-period sequence numberskernel/rcu/tree.c kernel/rcu/tree.h+18 -10 replies
2/40rcu: Move rcu_gp_slow() to ->gp_seqkernel/rcu/tree.c+2 -10 replies
3/40rcu: Make rcutorture's batches-completed API use ->gp_seqkernel/rcu/rcu.h kernel/rcu/rcuperf.c kernel/rcu/rcutorture.c +1 more+45 -1000 replies
4/40rcu: Convert rcu_check_gp_kthread_starvation() to GP sequence numberkernel/rcu/tree.c+2 -20 replies
5/40rcu: Make quiescent-state reporting use ->gp_seqkernel/rcu/tree.c+9 -90 replies
6/40rcu: Convert conditional grace-period primitives to ->gp_seqkernel/rcu/tree.c+10 -320 replies
7/40rcu: Move RCU's grace-period-change code to ->gp_seqkernel/rcu/rcu.h kernel/rcu/tree.c+33 -230 replies
8/40rcu: Convert rcu_gpnum_ovf() to ->gp_seqkernel/rcu/tree.c+3 -20 replies
9/40rcu: Move rcu_implicit_dynticks_qs() to ->gp_seqkernel/rcu/tree.c+1 -10 replies
10/40rcu: Move rcu_try_advance_all_cbs() to ->gp_seqkernel/rcu/tree_plugin.h+2 -10 replies
11/40rcu: Move rcu_nocb_gp_get() to ->gp_seqkernel/rcu/tree_plugin.h+1 -10 replies
12/40rcu: Move rcu_gp_in_progress() to ->gp_seqkernel/rcu/tree.c+1 -10 replies
13/40rcu: Convert ->rcu_iw_gpnum to ->gp_seqkernel/rcu/tree.c kernel/rcu/tree.h kernel/rcu/tree_plugin.h+8 -80 replies
14/40rcu: Convert ->completedqs to ->gp_seqkernel/rcu/tree.c kernel/rcu/tree_plugin.h+4 -40 replies
15/40rcu: Convert grace-period requests to ->gp_seqkernel/rcu/tree.c kernel/rcu/tree.h kernel/rcu/tree_plugin.h+24 -680 replies
16/40rcu: Make RCU CPU stall warnings use ->gp_seqkernel/rcu/tree.c kernel/rcu/tree_plugin.h+30 -290 replies
17/40rcutorture: Convert rcutorture_get_gp_data() to ->gp_seqkernel/rcu/rcu.h kernel/rcu/rcutorture.c kernel/rcu/srcutree.c +1 more+20 -310 replies
18/40rcu: Move from ->need_future_gp[] to ->gp_seq_neededkernel/rcu/tree.c kernel/rcu/tree.h+20 -320 replies
19/40rcu: Make rcu_nocb_wait_gp() check if GP already requestedkernel/rcu/tree.c kernel/rcu/tree_plugin.h+15 -50 replies
20/40rcu: Convert rcu_grace_period tracepoint to gp_seqinclude/trace/events/rcu.h kernel/rcu/tree.c kernel/rcu/tree_plugin.h+29 -290 replies
21/40rcu: Convert rcu_future_grace_period tracepoint to gp_seqinclude/trace/events/rcu.h kernel/rcu/tree.c+12 -170 replies
22/40rcu: Convert rcu_grace_period_init tracepoint to gp_seqinclude/trace/events/rcu.h+6 -60 replies
23/40rcu: Convert rcu_preempt_task tracepoint to ->gp_seqinclude/trace/events/rcu.h kernel/rcu/tree_plugin.h+8 -80 replies
24/40rcu: Convert rcu_unlock_preempted_task tracepoint to ->gp_seqinclude/trace/events/rcu.h kernel/rcu/tree_plugin.h+8 -80 replies
25/40rcu: Convert rcu_quiescent_state_report tracepoint to ->gp_seqinclude/trace/events/rcu.h kernel/rcu/tree.c kernel/rcu/tree_plugin.h+8 -80 replies
26/40rcu: Convert rcu_fqs tracepoint to ->gp_seqinclude/trace/events/rcu.h kernel/rcu/tree.c+10 -100 replies
27/40rcu: Remove ->gpnum and ->completedkernel/rcu/tree.c kernel/rcu/tree.h kernel/rcu/tree_plugin.h+13 -480 replies
28/40rcu: Make simple callback acceleration refer to rdp->gp_seq_neededkernel/rcu/tree.c+32 -190 replies
29/40doc: Update data-structure documentation for ->gp_seqDocumentation/RCU/Design/Data-Structures/Data-Structures.html+63 -550 replies
30/40doc: Update memory-ordering documentation for ->gp-seqDocumentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.html Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-cleanup.svg Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-init-1.svg +3 more+243 -2230 replies
31/40doc: Update RCU CPU stall-warning documentationDocumentation/RCU/stallwarn.txt+12 -120 replies
32/40rcu: Don't funnel-lock above leaf node if GP in progressinclude/trace/events/rcu.h kernel/rcu/tree.c+11 -20 replies
33/40rcu: Produce last "CleanupMore" trace only if late-breaking requestkernel/rcu/tree.c+1 -10 replies
34/40rcu: Fix cpustart tracepoint gp_seq numberkernel/rcu/tree.c+1 -10 replies
35/40rcu: Make rcu_start_this_gp() check for grace period already startedkernel/rcu/rcu.h kernel/rcu/tree.c+10 -10 replies
36/40rcutorture: Correctly handle grace-period sequence wrapkernel/rcu/rcu.h kernel/rcu/rcuperf.c kernel/rcu/rcutorture.c +1 more+41 -110 replies
37/40rcu: Regularize resetting of rcu_data wrap indicatorkernel/rcu/tree.c+4 -20 replies
38/40rcu: Rename the grace-period-request variables and parametersinclude/trace/events/rcu.h kernel/rcu/tree.c+35 -260 replies
39/40rcu: Use better variable names in funnel locking loopkernel/rcu/tree.c+32 -320 replies
40/40rcu: Identify grace period is in progress as we advance up the treekernel/rcu/tree.c+5 -40 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH tip/core/rcu 0/40] RCU ->gp_seq conversion for v4.19

Hello!

This series moves from the two-variable ->gpnum and ->completed to a single-variable ->gp_seq approach. The key point is that ->gpnum and ->completed are either identical or ->gpnum is only one greater, which means that we are using a full unsigned long were a single bit would do. This series therefore applies the pre-existing grace-period sequence-number code used by expedited grace periods, _rcu_barrier(), and SRCU. This change also has the beneficial effect of allowing the grace-period state to be sampled with a single load, which will be used to improve the grace-period start code. The individual commits are as follows:

1. Introduce grace-period sequence numbers (->gp_seq) to normal RCU.

2-17. Make core RCU code use ->gp_seq instead of ->gpnum and ->completed.

18. Move from ->need_future_gp[] to ->gp_seq_needed, which allows
simpler grace-period-already-requested checks.

19. Use the new ->gp_seq_needed to make rcu_nocb_wait_gp() check if
a given grace has already been requested, thus reducing overhead for no-CBs CPUs.

20-26. Move RCU tracepoints to ->gp_seq.

27. Remove ->gpnum and ->completed.

28. Make simple callback acceleration refer to rdp->gp_seq_needed.

29-31. Update documentation to reflect ->gp_seq.

32. Don't funnel-lock above the leaf rcu_node structure if a grace period

	is in progress, thus saving an upper-level rcu_node ->lock
	acquisition.

33. Produce the last CleanupMore trace only if the corresponding
grace-period request was quite recent, courtesy of Joel Fernandes.

34. Fix cpustart tracepoint ->gp_seq number, courtesy of Joel Fernandes.

35. Make rcu_start_this_gp() check for grace period already started.

36. Correctly handle grace-period sequence (->gp_seq) wrap in
rcutorture.

37. Regularize resetting of rcu_data wrap indicator.

38-39. Rename grace-period-request variables and parameters, courtesy
of Joel Fernandes.

40. Check current node rather than leaf node for requested grace
period already being in progress.

Thanx, Paul

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

 Documentation/RCU/Design/Data-Structures/Data-Structures.html          |  118 -
 Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.html |   22 
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-cleanup.svg        |  123 -
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-init-1.svg         |   16 
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-init-3.svg         |   56 
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp.svg                |  237 +--
 Documentation/RCU/Design/Memory-Ordering/TreeRCU-qs.svg                |   12 
 Documentation/RCU/stallwarn.txt                                        |   24 
 include/trace/events/rcu.h                                             |  114 -
 kernel/rcu/rcu.h                                                       |   70 -
 kernel/rcu/rcuperf.c                                                   |   44 
 kernel/rcu/rcutorture.c                                                |   93 -
 kernel/rcu/srcutree.c                                                  |    5 
 kernel/rcu/tree.c                                                      |  678 ++++------
 kernel/rcu/tree.h                                                      |   40 
 kernel/rcu/tree_plugin.h                                               |   54 
 16 files changed, 832 insertions(+), 874 deletions(-)