From: Artem Kuzin <[email protected]>

Co-developed-by: Nikita Panov <[email protected]>
Signed-off-by: Nikita Panov <[email protected]>
Co-developed-by: Alexander Grubnikov <[email protected]>
Signed-off-by: Alexander Grubnikov <[email protected]>
Signed-off-by: Artem Kuzin <[email protected]>
---
 include/linux/mm_types.h | 11 ++++++++++-
 mm/Kconfig               | 10 ++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 7d30dc4ff0ff..1fafb8425994 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -22,6 +22,8 @@
 
 #include <asm/mmu.h>
 
+#include <linux/numa.h>
+
 #ifndef AT_VECTOR_SIZE_ARCH
 #define AT_VECTOR_SIZE_ARCH 0
 #endif
@@ -626,7 +628,14 @@ struct mm_struct {
                unsigned long mmap_compat_legacy_base;
 #endif
                unsigned long task_size;        /* size of task vm space */
-               pgd_t * pgd;
+#ifndef CONFIG_KERNEL_REPLICATION
+               pgd_t *pgd;
+#else
+               union {
+                       pgd_t *pgd;
+                       pgd_t *pgd_numa[MAX_NUMNODES];
+               };
+#endif
 
 #ifdef CONFIG_MEMBARRIER
                /**
diff --git a/mm/Kconfig b/mm/Kconfig
index 09130434e30d..5fe5b3ba7f99 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -1236,6 +1236,16 @@ config LOCK_MM_AND_FIND_VMA
        bool
        depends on !STACK_GROWSUP
 
+config KERNEL_REPLICATION
+       bool "Enable kernel text and ro-data replication between NUMA nodes"
+       default n
+       depends on (X86_64 && !(KASAN && X86_5LEVEL)) && MMU && NUMA && !MAXSMP
+
+       help
+         Creates per-NUMA node replicas of kernel text and rodata sections.
+         Page tables are replicated partially, according to replicated kernel 
memory range.
+         If unsure, say "n".
+
 source "mm/damon/Kconfig"
 
 endmenu
-- 
2.34.1


Reply via email to