[PATCH 00/10] sched.h modernization -v2, phase #1: "Pre-splitup cleanups"

Ingo Molnar
2017-02-08T18:36:24Z

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