Messages in this thread | | | Date | Fri, 1 Dec 2017 11:36:25 -0800 | From | "Paul E. McKenney" <> | Subject | [PATCH tip/core/rcu 0/17] RCU dyntick updates for v4.16 |
| |
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(-)
| |