On Wed, 26 Jun 2019 at 22:51, Kees Cook <keesc...@chromium.org> wrote: > > While jump_label_init() was moved earlier in the boot process in commit > efd9e03facd0 ("arm64: Use static keys for CPU features"), it wasn't > early enough for early params to use it. The old state of things was as > described here... > > init/main.c calls out to arch-specific things before general jump > label and early param handling: > > asmlinkage __visible void __init start_kernel(void) > { > ... > setup_arch(&command_line); > ... > smp_prepare_boot_cpu(); > ... > /* parameters may set static keys */ > jump_label_init(); > parse_early_param(); > ... > } > > x86 setup_arch() wants those earlier, so it handles jump label and > early param: > > void __init setup_arch(char **cmdline_p) > { > ... > jump_label_init(); > ... > parse_early_param(); > ... > } > > arm64 setup_arch() only had early param: > > void __init setup_arch(char **cmdline_p) > { > ... > parse_early_param(); > ... > } > > with jump label later in smp_prepare_boot_cpu(): > > void __init smp_prepare_boot_cpu(void) > { > ... > jump_label_init(); > ... > } > > This moves arm64 jump_label_init() from smp_prepare_boot_cpu() to > setup_arch(), as done already on x86, in preparation from early param > usage in the init_on_alloc/free() series: > https://lkml.kernel.org/r/1561572949.5154.81.ca...@lca.pw > > Signed-off-by: Kees Cook <keesc...@chromium.org>
Acked-by: Ard Biesheuvel <ard.biesheu...@linaro.org> > --- > arch/arm64/kernel/setup.c | 5 +++++ > arch/arm64/kernel/smp.c | 5 ----- > 2 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > index 7e541f947b4c..9c4bad7d7131 100644 > --- a/arch/arm64/kernel/setup.c > +++ b/arch/arm64/kernel/setup.c > @@ -283,6 +283,11 @@ void __init setup_arch(char **cmdline_p) > > setup_machine_fdt(__fdt_pointer); > > + /* > + * Initialise the static keys early as they may be enabled by the > + * cpufeature code and early parameters. > + */ > + jump_label_init(); > parse_early_param(); > > /* > diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c > index 6dcf9607d770..20c456b3862c 100644 > --- a/arch/arm64/kernel/smp.c > +++ b/arch/arm64/kernel/smp.c > @@ -424,11 +424,6 @@ void __init smp_cpus_done(unsigned int max_cpus) > void __init smp_prepare_boot_cpu(void) > { > set_my_cpu_offset(per_cpu_offset(smp_processor_id())); > - /* > - * Initialise the static keys early as they may be enabled by the > - * cpufeature code. > - */ > - jump_label_init(); > cpuinfo_store_boot_cpu(); > > /* > -- > 2.17.1 > > > -- > Kees Cook