@@ -439,9 +439,6 @@ SYM_FUNC_START_LOCAL(__primary_switched)
#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)
bl kasan_early_init
#endif
- mov x0, x20 // pass the full boot status
- mov x1, x22 // pass the low FDT mapping
- bl __pi_init_feature_override // Parse cpu feature overrides
#ifdef CONFIG_UNWIND_PATCH_PAC_INTO_SCS
bl scs_patch_vmlinux
#endif
@@ -698,12 +695,16 @@ SYM_FUNC_START_LOCAL(__primary_switch)
bl __pi_memset
dsb ishst // Make zero page visible to PTW
-#ifdef CONFIG_RELOCATABLE
- adrp x23, KERNEL_START
- and x23, x23, MIN_KIMG_ALIGN - 1
adrp x1, early_init_stack
mov sp, x1
mov x29, xzr
+ mov x0, x20 // pass the full boot status
+ mov x1, x22 // pass the low FDT mapping
+ bl __pi_init_feature_override // Parse cpu feature overrides
+
+#ifdef CONFIG_RELOCATABLE
+ adrp x23, KERNEL_START
+ and x23, x23, MIN_KIMG_ALIGN - 1
#ifdef CONFIG_RANDOMIZE_BASE
mov x0, x22
bl __pi_kaslr_early_init
@@ -20,7 +20,7 @@
#define FTR_ALIAS_NAME_LEN 30
#define FTR_ALIAS_OPTION_LEN 116
-static u64 __boot_status __initdata;
+static u64 __boot_status;
struct ftr_set_desc {
s32 override_offset; // must remain first
@@ -317,10 +317,8 @@ SECTIONS
init_pg_dir = .;
. += INIT_DIR_SIZE;
init_pg_end = .;
-#ifdef CONFIG_RELOCATABLE
- . += SZ_4K; /* stack for the early relocation code */
+ . += SZ_4K; /* stack for the early C runtime */
early_init_stack = .;
-#endif
. = ALIGN(SEGMENT_ALIGN);
__pecoff_data_size = ABSOLUTE(. - __initdata_begin);
To permit the feature overrides to be taken into account before the KASLR init code runs and the kernel mapping is created, move the detection code to an earlier stage in the boot. In a subsequent patch, this will be taken advantage of by merging the preliminary and permanent mappings of the kernel text and data into a single one that gets created and relocated before start_kernel() is called. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> --- arch/arm64/kernel/head.S | 13 +++++++------ arch/arm64/kernel/pi/idreg-override.c | 2 +- arch/arm64/kernel/vmlinux.lds.S | 4 +--- 3 files changed, 9 insertions(+), 10 deletions(-)