[PATCH tip/core/rcu 0/17] RCU dyntick updates for v4.16

From: Paul E. McKenney
Date: Fri Dec 01 2017 - 14:36:36 EST


Hello!

This series includes simplifications of RCU's dyntick-idle processing,
most importantly making use of the the NMI style of processing for
interrupts as well as NMIs. This series provides a net decrease of more
than 100 lines of code.

1. Avoid ->dynticks_nmi_nesting store tearing.

2. Reduce dyntick-idle state space by carefully ordering adjustments
of nesting and overall state.

3. Move rcu_nmi_{enter,exit}() to prepare for consolidation.

4. Clamp ->dynticks_nmi_nesting at eqs entry/exit. This is required
to handle the half-interrupts featured by some architectures.
It used to be handled by the interrupt portion of RCU's
dyntick-idle processing, which this series is eliminating.
Thus the clamping must move.

5. Define rcu_irq_{enter,exit}() in terms of rcu_nmi_{enter,exit}().

6. Make ->dynticks_nesting be a simple counter, given that it now
handles only process-level reasons why RCU should be watching.

7. Eliminate rcu_irq_enter_disabled() because the NMI handling
already handles the possibility of interruption at any point.

8. Add tracing to irq/NMI dyntick-idle transitions.

9. Shrink ->dynticks_{nmi_,}nesting from long long to long because
there had better not be more than a billion process-level reasons
why RCU should be watching a given CPU.

10. Add ->dynticks field to rcu_dyntick trace event.

11. Stop duplicating lockdep checks in RCU's idle-entry code.

12. Avoid ->dynticks_nesting store tearing.

13. Fold rcu_eqs_enter_common() into rcu_eqs_enter() because it is
now only invoked from that one place.

14. Fold rcu_eqs_exit_common() into rcu_eqs_exit() because it is now
only invoked from that one place.

15. Simplify rcu_eqs_{enter,exit}() non-idle task debug code.

16. Update dyntick-idle design documentation to reflect NMI/irq
consolidation.

17. Remove no longer used trace event rcu_prep_idle, courtesy of
Steven Rostedt.

Thanx, Paul

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

Documentation/RCU/Design/Data-Structures/Data-Structures.html | 46
include/linux/rcutiny.h | 1
include/linux/rcutree.h | 1
include/linux/tracepoint.h | 5
include/trace/events/rcu.h | 87 -
kernel/rcu/rcu.h | 31
kernel/rcu/tree.c | 466 ++++------
kernel/rcu/tree.h | 5
kernel/rcu/tree_plugin.h | 2
kernel/trace/trace.c | 11
10 files changed, 256 insertions(+), 399 deletions(-)