diff options
author | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2019-12-19 16:44:52 -0500 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2020-06-25 13:45:43 +0200 |
commit | 590d69796346353878b275c5512c664e3f875f24 (patch) | |
tree | 3f067ae43ac90ed33744b69de6ecd8aa8b6ebd9d /include | |
parent | 87e867b4269f29dac8190bca13912d08163a277f (diff) | |
download | linux-stable-590d69796346353878b275c5512c664e3f875f24.tar.gz linux-stable-590d69796346353878b275c5512c664e3f875f24.tar.bz2 linux-stable-590d69796346353878b275c5512c664e3f875f24.zip |
sched: Force the address order of each sched class descriptor
In order to make a micro optimization in pick_next_task(), the order of the
sched class descriptor address must be in the same order as their priority
to each other. That is:
&idle_sched_class < &fair_sched_class < &rt_sched_class <
&dl_sched_class < &stop_sched_class
In order to guarantee this order of the sched class descriptors, add each
one into their own data section and force the order in the linker script.
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/157675913272.349305.8936736338884044103.stgit@localhost.localdomain
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index db600ef218d7..2186d7b01af6 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -109,6 +109,18 @@ #endif /* + * The order of the sched class addresses are important, as they are + * used to determine the order of the priority of each sched class in + * relation to each other. + */ +#define SCHED_DATA \ + *(__idle_sched_class) \ + *(__fair_sched_class) \ + *(__rt_sched_class) \ + *(__dl_sched_class) \ + *(__stop_sched_class) + +/* * Align to a 32 byte boundary equal to the * alignment gcc 4.5 uses for a struct */ @@ -388,6 +400,7 @@ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ __start_rodata = .; \ *(.rodata) *(.rodata.*) \ + SCHED_DATA \ RO_AFTER_INIT_DATA /* Read only after init */ \ . = ALIGN(8); \ __start___tracepoints_ptrs = .; \ |