Commit ba5b0333 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Catalin Marinas
Browse files

arm64: mm: omit redundant remap of kernel image



Now that the early kernel mapping is created with all the right
attributes and segment boundaries, there is no longer a need to recreate
it and switch to it. This also means we no longer have to copy the kasan
shadow or some parts of the fixmap from one set of page tables to the
other.

Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20240214122845.2033971-68-ardb+git@google.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 567a70c1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -100,7 +100,6 @@ enum fixed_addresses {
#define FIXMAP_PAGE_IO     __pgprot(PROT_DEVICE_nGnRE)

void __init early_fixmap_init(void);
void __init fixmap_copy(pgd_t *pgdir);

#define __early_set_fixmap __set_fixmap

+0 −2
Original line number Diff line number Diff line
@@ -17,11 +17,9 @@

asmlinkage void kasan_early_init(void);
void kasan_init(void);
void kasan_copy_shadow(pgd_t *pgdir);

#else
static inline void kasan_init(void) { }
static inline void kasan_copy_shadow(pgd_t *pgdir) { }
#endif

#endif
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ static inline bool kaslr_requires_kpti(void)
}

#define INIT_MM_CONTEXT(name)	\
	.pgd = init_pg_dir,
	.pgd = swapper_pg_dir,

#endif	/* !__ASSEMBLY__ */
#endif
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ PROVIDE(__pi_memstart_offset_seed = memstart_offset_seed);
PROVIDE(__pi_init_idmap_pg_dir		= init_idmap_pg_dir);
PROVIDE(__pi_init_pg_dir		= init_pg_dir);
PROVIDE(__pi_init_pg_end		= init_pg_end);
PROVIDE(__pi_swapper_pg_dir		= swapper_pg_dir);

PROVIDE(__pi__text			= _text);
PROVIDE(__pi__stext               	= _stext);
+5 −1
Original line number Diff line number Diff line
@@ -124,8 +124,12 @@ static void __init map_kernel(u64 kaslr_offset, u64 va_offset, int root_level)
			    text_prot, true, root_level);
		map_segment(init_pg_dir, NULL, va_offset, __inittext_begin,
			    __inittext_end, text_prot, false, root_level);
		dsb(ishst);
	}

	/* Copy the root page table to its final location */
	memcpy((void *)swapper_pg_dir + va_offset, init_pg_dir, PGD_SIZE);
	dsb(ishst);
	idmap_cpu_replace_ttbr1(swapper_pg_dir);
}

static void __init map_fdt(u64 fdt)
Loading