This is the second version of the sched.h modernization series I posted two days ago:
https://lkml.org/lkml/2017/2/6/468 The point of the series is to significantly reduce the <linux/sched.h> footprint, to speed up the kernel build and to have a cleaner header structure. The new <linux/sched.h>'s typical preprocessed size goes down from ~0.68 MB (~22K lines) to ~0.45 MB (~15K lines) and is around 40% faster to build on typical configs. The Git tree can be found at: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git WIP.sched/core Changes in -v2: As per the suggestions from Linus, -v2 has a reworked patch split-up structure that should be easier to review, validate, test and bisect. I've further split up the patches into 148 component patches and reordered them into the following five groups/phases: phase #1: "Pre-splitup cleanups": # 0721da143d99~1..582c7529a1bd, 10 patches phase #2: "Prepare header dependencies": # 9017f600c534~1..d1eb6f0b580d, 48 patches phase #3: "Move definitions between headers": # 3d01f4b6e32d~1..fd88c1773dd6, 53 patches phase #4: "Remove header dependencies": # 2d246f83c5d3~1..2205323e0ca1, 35 patches phase #5: "Post-splitup cleanups": # 55cf8bfb3af4~1..bcc6be9d66b2, 2 patches The "pre-splitup cleanups" phase does a handful of preparatory changes that make the subsequent sched.h restructuring easier. Some of these patches have (mostly minor) semantic side-effects. The middle phases are structured in a way to make it relatively easy to review and verify that they have no semantic side-effects: "Prepare header dependencies": - These patches just add trivial placeholder headers and update various .c and .h files with the expected future dependencies. These patches increase the header dependency graph of the kernel monotonically. "Move definitions between headers": - These are the meat of the code movement, but they don't actually change the header dependency graph: all code movement is between pre-existing headers. "Remove header dependencies": - These remove header #include lines and remove prototypes and thus shrink the header dependency graph monotonically to the desired end result. These are small patches but most breakage will likely bisect to these, so their finegrained split-up is useful as well. The "post-splitup cleanups" do cleanups on top of the finished split-up header structure. It's two patches for now, more cleanups will be done later. I've done a bisection step by step build test of all 148 steps on x86-defconfig, and have performed a fair amount of all[yes|mod|no]config tests, cross-build tests and boot tests on the final tree. Fixes to any bugs will be merged back into the series to preserve bisectability. As a first step the "pre-splitup" patches are sent a reply to this 0/10 email. I'll send the other phases in separate email threads, to make them easier to review. As usual, any feedback is welcome! Thanks, Ingo Ingo Molnar (10): sched/headers: Make all include/linux/sched/*.h headers build standalone sched/core: Convert ___assert_task_state() link time assert to BUILD_BUG_ON() sched/headers: Make task_struct::wake_q an opaque pointer sched/core: Move the get_preempt_disable_ip() inline to sched/core.c sched/core: Remove the tsk_cpus_allowed() wrapper sched/core: Remove the tsk_nr_cpus_allowed() wrapper rcu: Separate the RCU synchronization types and APIs into <linux/rcupdate_wait.h> sched/headers, cgroups: Remove the threadgroup_change_*() wrappery mm/vmacache, sched/headers: Introduce 'struct vmacache' and move it from <linux/sched.h> to <linux/mm_types> kasan, sched/headers: Uninline kasan_enable/disable_current() arch/powerpc/kernel/smp.c | 2 +- arch/powerpc/platforms/cell/spufs/sched.c | 2 +- arch/sparc/kernel/sysfs.c | 2 +- drivers/cpufreq/sparc-us2e-cpufreq.c | 4 ++-- drivers/cpufreq/sparc-us3-cpufreq.c | 4 ++-- drivers/infiniband/hw/hfi1/affinity.c | 2 +- drivers/infiniband/hw/hfi1/sdma.c | 2 +- fs/autofs4/autofs_i.h | 1 + fs/exec.c | 6 ++--- include/linux/cgroup-defs.h | 13 ++++++----- include/linux/dcache.h | 1 + include/linux/kasan.h | 10 ++------- include/linux/mm_types.h | 12 ++++++++++ include/linux/rcupdate.h | 40 --------------------------------- include/linux/rcupdate_wait.h | 50 +++++++++++++++++++++++++++++++++++++++++ include/linux/rcutiny.h | 11 ++------- include/linux/sched.h | 61 +++++--------------------------------------------- include/linux/sched/deadline.h | 8 ++++--- include/linux/sched/prio.h | 6 ++--- include/linux/sched/rt.h | 10 +++++---- include/linux/sched/sysctl.h | 10 ++++++--- include/linux/vmacache.h | 2 +- kernel/cgroup_pids.c | 2 +- kernel/debug/debug_core.c | 4 ++-- kernel/fork.c | 8 +++---- kernel/rcu/srcu.c | 2 +- kernel/rcu/tiny.c | 14 +++++++++++- kernel/rcu/tree.c | 2 +- kernel/rcu/update.c | 1 + kernel/sched/core.c | 41 +++++++++++++++++++++------------ kernel/sched/cpudeadline.c | 4 ++-- kernel/sched/cpupri.c | 4 ++-- kernel/sched/deadline.c | 35 ++++++++++++++--------------- kernel/sched/fair.c | 25 ++++++++++----------- kernel/sched/rt.c | 29 ++++++++++++------------ kernel/signal.c | 6 ++--- lib/sbitmap.c | 1 + lib/smp_processor_id.c | 2 +- mm/kasan/kasan.c | 10 +++++++++ mm/nommu.c | 2 +- mm/vmacache.c | 10 ++++----- samples/trace_events/trace-events-sample.c | 2 +- 42 files changed, 234 insertions(+), 229 deletions(-) create mode 100644 include/linux/rcupdate_wait.h -- 2.7.4

