Commit 1bffe6f6 authored by Kiryl Shutsemau's avatar Kiryl Shutsemau Committed by Ingo Molnar
Browse files

x86/mm/64: Always use dynamic memory layout



Dynamic memory layout is used by KASLR and 5-level paging.

CONFIG_X86_5LEVEL is going to be removed, making 5-level paging support
unconditional which requires unconditional support of dynamic memory
layout.

Remove CONFIG_DYNAMIC_MEMORY_LAYOUT.

Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
Reviewed-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Cc: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Kieran Bingham <kbingham@kernel.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250516123306.3812286-2-kirill.shutemov@linux.intel.com
parent a0f3fe54
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -1467,7 +1467,6 @@ config X86_PAE
config X86_5LEVEL
	bool "Enable 5-level page tables support"
	default y
	select DYNAMIC_MEMORY_LAYOUT
	select SPARSEMEM_VMEMMAP
	depends on X86_64
	help
@@ -2168,17 +2167,10 @@ config PHYSICAL_ALIGN

	  Don't change this unless you know what you are doing.

config DYNAMIC_MEMORY_LAYOUT
	bool
	help
	  This option makes base addresses of vmalloc and vmemmap as well as
	  __PAGE_OFFSET movable during boot.

config RANDOMIZE_MEMORY
	bool "Randomize the kernel memory sections"
	depends on X86_64
	depends on RANDOMIZE_BASE
	select DYNAMIC_MEMORY_LAYOUT
	default RANDOMIZE_BASE
	help
	  Randomizes the base virtual address of kernel memory sections
+0 −4
Original line number Diff line number Diff line
@@ -41,11 +41,7 @@
#define __PAGE_OFFSET_BASE_L5	_AC(0xff11000000000000, UL)
#define __PAGE_OFFSET_BASE_L4	_AC(0xffff888000000000, UL)

#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
#define __PAGE_OFFSET           page_offset_base
#else
#define __PAGE_OFFSET           __PAGE_OFFSET_BASE_L4
#endif /* CONFIG_DYNAMIC_MEMORY_LAYOUT */

#define __START_KERNEL_map	_AC(0xffffffff80000000, UL)

+0 −6
Original line number Diff line number Diff line
@@ -128,15 +128,9 @@ extern unsigned int ptrs_per_p4d;
#define __VMEMMAP_BASE_L4	0xffffea0000000000UL
#define __VMEMMAP_BASE_L5	0xffd4000000000000UL

#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
# define VMALLOC_START		vmalloc_base
# define VMALLOC_SIZE_TB	(pgtable_l5_enabled() ? VMALLOC_SIZE_TB_L5 : VMALLOC_SIZE_TB_L4)
# define VMEMMAP_START		vmemmap_base
#else
# define VMALLOC_START		__VMALLOC_BASE_L4
# define VMALLOC_SIZE_TB	VMALLOC_SIZE_TB_L4
# define VMEMMAP_START		__VMEMMAP_BASE_L4
#endif /* CONFIG_DYNAMIC_MEMORY_LAYOUT */

#ifdef CONFIG_RANDOMIZE_MEMORY
# define DIRECT_MAP_PHYSMEM_END	direct_map_physmem_end
+0 −2
Original line number Diff line number Diff line
@@ -59,14 +59,12 @@ unsigned int ptrs_per_p4d __ro_after_init = 1;
EXPORT_SYMBOL(ptrs_per_p4d);
#endif

#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
unsigned long page_offset_base __ro_after_init = __PAGE_OFFSET_BASE_L4;
EXPORT_SYMBOL(page_offset_base);
unsigned long vmalloc_base __ro_after_init = __VMALLOC_BASE_L4;
EXPORT_SYMBOL(vmalloc_base);
unsigned long vmemmap_base __ro_after_init = __VMEMMAP_BASE_L4;
EXPORT_SYMBOL(vmemmap_base);
#endif

/* Wipe all early page tables except for the kernel symbol map */
static void __init reset_early_page_tables(void)
+1 −3
Original line number Diff line number Diff line
@@ -29,11 +29,9 @@ def page_mask(level=1):
        raise Exception(f'Unknown page level: {level}')


#page_offset_base in case CONFIG_DYNAMIC_MEMORY_LAYOUT is disabled
POB_NO_DYNAMIC_MEM_LAYOUT = '0xffff888000000000'
def _page_offset_base():
    pob_symbol = gdb.lookup_global_symbol('page_offset_base')
    pob = pob_symbol.name if pob_symbol else POB_NO_DYNAMIC_MEM_LAYOUT
    pob = pob_symbol.name
    return gdb.parse_and_eval(pob)