Commit 6cf30591 authored by Nikita Panov's avatar Nikita Panov Committed by Denis Darvish
Browse files

mm: enable per-NUMA node kernel text and rodata replication

kunpeng inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IBOJU2



-------------------------------------------------

Acked-by: default avatarArtem Kuzin <artem.kuzin@huawei.com>
Acked-by: default avatarAlexander Grubnikov <alexander.grubnikov@huawei.com>
Acked-by: default avatarIlya Hanov <ilya.hanov@huawei-partners.com>
Acked-by: default avatarDenis Darvish <darvish.denis@huawei.com>
Signed-off-by: default avatarNikita Panov <panov.nikita@huawei.com>
parent ca4a4e66
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -3363,6 +3363,9 @@ extern int __meminit early_pfn_to_nid(unsigned long pfn);

extern void set_dma_reserve(unsigned long new_dma_reserve);
extern void mem_init(void);
#ifdef CONFIG_KERNEL_REPLICATION
extern void preallocate_vmalloc_pages(void);
#endif
extern void __init mmap_init(void);

extern void __show_mem(unsigned int flags, nodemask_t *nodemask, int max_zone_idx);
+17 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@
#include <linux/init_syscalls.h>
#include <linux/stackdepot.h>
#include <linux/randomize_kstack.h>
#include <linux/numa_kernel_replication.h>
#include <net/net_namespace.h>

#include <asm/io.h>
@@ -928,11 +929,19 @@ void start_kernel(void)
	 * These use large bootmem allocations and must precede
	 * initalization of page allocator
	 */
	numa_replication_init();
	setup_log_buf(0);
	vfs_caches_init_early();
	sort_main_extable();
	trap_init();
	mm_core_init();
	/*
	 * Kernel text replication should be done before
	 * alloc/init first mm struct, due to it is necessary
	 * to setup per-NUMA node translation tables and kernel
	 * instances properly.
	 */
	numa_replicate_kernel_text();
	poking_init();
	ftrace_init();

@@ -1455,6 +1464,14 @@ static int __ref kernel_init(void *unused)
	free_initmem();
	mark_readonly();

	/*
	 * RODATA replication is done here due to
	 * it is necessary to finalize the kernel
	 * and modules initialization before
	 */
	numa_replicate_kernel_rodata();
	numa_replication_fini();

	/*
	 * Kernel mappings are now finalized - update the userspace page-table
	 * to finalize PTI.
+3 −0
Original line number Diff line number Diff line
@@ -2819,6 +2819,9 @@ void __init mm_core_init(void)
	ptlock_cache_init();
	pgtable_cache_init();
	debug_objects_mem_init();
#ifdef CONFIG_KERNEL_REPLICATION
	preallocate_vmalloc_pages();
#endif
	vmalloc_init();
	/* If no deferred init page_ext now, as vmap is fully initialized */
	if (!deferred_struct_pages)