Commit 16a71c04 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/8xx: Preallocate execmem page tables



Preallocate execmem page tables before creating new PGDs so that
all PGD entries related to execmem can be copied in pgd_alloc().

On 8xx there are 32 Mbytes for execmem by default so this will use
32 kbytes.

Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/a7180cc1ba59dec4502af39b4e9f3ff91c57280d.1724173828.git.christophe.leroy@csgroup.eu
parent c5eec4df
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -412,6 +412,18 @@ EXPORT_SYMBOL_GPL(walk_system_ram_range);
#ifdef CONFIG_EXECMEM
static struct execmem_info execmem_info __ro_after_init;

#ifdef CONFIG_PPC_8xx
static void prealloc_execmem_pgtable(void)
{
	unsigned long va;

	for (va = ALIGN_DOWN(MODULES_VADDR, PGDIR_SIZE); va < MODULES_END; va += PGDIR_SIZE)
		pte_alloc_kernel(pmd_off_k(va), va);
}
#else
static void prealloc_execmem_pgtable(void) { }
#endif

struct execmem_info __init *execmem_arch_setup(void)
{
	pgprot_t kprobes_prot = strict_module_rwx_enabled() ? PAGE_KERNEL_ROX : PAGE_KERNEL_EXEC;
@@ -443,6 +455,8 @@ struct execmem_info __init *execmem_arch_setup(void)
	end = VMALLOC_END;
#endif

	prealloc_execmem_pgtable();

	execmem_info = (struct execmem_info){
		.ranges = {
			[EXECMEM_DEFAULT] = {