Hello! This series re-implements RCU Tasks Trace in terms of SRCU-fast, reducing the size of the Linux-kernel RCU implementation by several hundred lines of code. It also removes a conditional branch from the srcu_read_lock_fast() implementation in order to make SRCU-fast a bit more fastpath-friendly. The patches are as follows:
1. Re-implement RCU Tasks Trace in terms of SRCU-fast. 2. Remove unused ->trc_ipi_to_cpu and ->trc_blkd_cpu from task_struct. 3. Remove ->trc_blkd_node from task_struct. 4. Remove ->trc_holdout_list from task_struct. 5. Remove rcu_tasks_trace_qs() and the functions that it calls. 6. context_tracking: Remove rcu_task_trace_heavyweight_{enter,exit}(). 7. Remove ->trc_reader_special from task_struct. 8. Remove now-empty RCU Tasks Trace functions and calls to them. 9. Remove unused rcu_tasks_trace_lazy_ms and trc_stall_chk_rdr struct. 10. Remove now-empty show_rcu_tasks_trace_gp_kthread() function. 11. Remove now-empty rcu_tasks_trace_get_gp_data() function. 12. Remove now-empty rcu_tasks_trace_torture_stats_print() function. 13. Remove now-empty get_rcu_tasks_trace_gp_kthread() function. 14. Move rcu_tasks_trace_srcu_struct out of #ifdef CONFIG_TASKS_RCU_GENERIC. 15. Add noinstr-fast rcu_read_{,un}lock_tasks_trace() APIs. 16. Remove now-unused rcu_task_ipi_delay and TASKS_TRACE_RCU_READ_MB. 17. Create a DEFINE_SRCU_FAST(). 18. Use smp_mb() only when necessary in RCU Tasks Trace readers. 19. Update Requirements.rst for RCU Tasks Trace. 20. Deprecate rcu_read_{,un}lock_trace(). 21. Mark diagnostic functions as notrace. 22. Guard __DECLARE_TRACE() use of __DO_TRACE_CALL() with SRCU-fast. 23. Create an srcu_expedite_current() function. 24. Test srcu_expedite_current(). 25. Create an rcu_tasks_trace_expedite_current() function. 26. Test rcu_tasks_trace_expedite_current(). 27. Make DEFINE_SRCU_FAST() available to modules. 28. Make SRCU-fast available to heap srcu_struct structures. 29. Make grace-period determination use ssp->srcu_reader_flavor. 30. Exercise DEFINE_STATIC_SRCU_FAST() and init_srcu_struct_fast(). 31. Exercise DEFINE_STATIC_SRCU_FAST() and init_srcu_struct_fast(). 32. Require special srcu_struct define/init for SRCU-fast readers. 33. Make SRCU-fast readers enforce use of SRCU-fast definition/init. 34. Update for SRCU-fast definitions and initialization. Thanx, Paul ------------------------------------------------------------------------ Documentation/RCU/Design/Requirements/Requirements.rst | 33 Documentation/admin-guide/kernel-parameters.txt | 7 b/Documentation/RCU/Design/Requirements/Requirements.rst | 12 b/Documentation/RCU/checklist.rst | 12 b/Documentation/RCU/whatisRCU.rst | 3 b/Documentation/admin-guide/kernel-parameters.txt | 8 b/include/linux/notifier.h | 2 b/include/linux/rcupdate.h | 26 b/include/linux/rcupdate_trace.h | 107 +- b/include/linux/sched.h | 1 b/include/linux/srcu.h | 16 b/include/linux/srcutiny.h | 1 b/include/linux/srcutree.h | 20 b/include/linux/tracepoint.h | 45 - b/include/trace/perf.h | 4 b/include/trace/trace_events.h | 4 b/init/init_task.c | 1 b/kernel/context_tracking.c | 20 b/kernel/fork.c | 1 b/kernel/rcu/Kconfig | 2 b/kernel/rcu/rcu.h | 5 b/kernel/rcu/rcuscale.c | 6 b/kernel/rcu/rcutorture.c | 1 b/kernel/rcu/refscale.c | 9 b/kernel/rcu/srcutiny.c | 13 b/kernel/rcu/srcutree.c | 58 + b/kernel/rcu/tasks.h | 617 --------------- b/kernel/rcu/tree.c | 2 b/kernel/rcu/update.c | 8 b/kernel/tracepoint.c | 21 b/scripts/checkpatch.pl | 2 b/tools/testing/selftests/rcutorture/configs/rcu/TRACE01 | 1 b/tools/testing/selftests/rcutorture/configs/rcu/TRACE02 | 1 include/linux/rcupdate.h | 5 include/linux/rcupdate_trace.h | 85 +- include/linux/sched.h | 5 include/linux/srcu.h | 40 include/linux/srcutiny.h | 16 include/linux/srcutree.h | 48 - init/init_task.c | 2 kernel/fork.c | 2 kernel/rcu/Kconfig | 41 kernel/rcu/rcu.h | 4 kernel/rcu/rcuscale.c | 1 kernel/rcu/rcutorture.c | 33 kernel/rcu/srcutree.c | 39 kernel/rcu/tasks.h | 129 --- 47 files changed, 529 insertions(+), 990 deletions(-)