Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c7919bb authored by Kirill A. Shutemov's avatar Kirill A. Shutemov Committed by Ingo Molnar
Browse files

x86/mm: Make LDT_BASE_ADDR dynamic



LDT_BASE_ADDR has different value in 4- and 5-level paging
configurations.

We need to make it dynamic in preparation for boot-time switching
between paging modes.

Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20180214111656.88514-6-kirill.shutemov@linux.intel.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent e626e6bb
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -92,18 +92,19 @@ extern unsigned int pgtable_l5_enabled;
 */
#define MAXMEM			_AC(__AC(1, UL) << MAX_PHYSMEM_BITS, UL)

#define LDT_PGD_ENTRY_L4	-3UL
#define LDT_PGD_ENTRY_L5	-112UL
#define LDT_PGD_ENTRY		(pgtable_l5_enabled ? LDT_PGD_ENTRY_L5 : LDT_PGD_ENTRY_L4)
#define LDT_BASE_ADDR		(LDT_PGD_ENTRY << PGDIR_SHIFT)

#ifdef CONFIG_X86_5LEVEL
# define VMALLOC_SIZE_TB	_AC(12800, UL)
# define __VMALLOC_BASE		_AC(0xffa0000000000000, UL)
# define __VMEMMAP_BASE		_AC(0xffd4000000000000, UL)
# define LDT_PGD_ENTRY		_AC(-112, UL)
# define LDT_BASE_ADDR		(LDT_PGD_ENTRY << PGDIR_SHIFT)
#else
# define VMALLOC_SIZE_TB	_AC(32, UL)
# define __VMALLOC_BASE		_AC(0xffffc90000000000, UL)
# define __VMEMMAP_BASE		_AC(0xffffea0000000000, UL)
# define LDT_PGD_ENTRY		_AC(-3, UL)
# define LDT_BASE_ADDR		(LDT_PGD_ENTRY << PGDIR_SHIFT)
#endif

#ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
+4 −1
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ static struct addr_marker address_markers[] = {
	[KASAN_SHADOW_END_NR]	= { KASAN_SHADOW_END,	"KASAN shadow end" },
#endif
#ifdef CONFIG_MODIFY_LDT_SYSCALL
	[LDT_NR]		= { LDT_BASE_ADDR,	"LDT remap" },
	[LDT_NR]		= { 0UL,		"LDT remap" },
#endif
	[CPU_ENTRY_AREA_NR]	= { CPU_ENTRY_AREA_BASE,"CPU entry Area" },
#ifdef CONFIG_X86_ESPFIX64
@@ -570,6 +570,9 @@ static int __init pt_dump_init(void)
	address_markers[LOW_KERNEL_NR].start_address = PAGE_OFFSET;
	address_markers[VMALLOC_START_NR].start_address = VMALLOC_START;
	address_markers[VMEMMAP_START_NR].start_address = VMEMMAP_START;
#ifdef CONFIG_MODIFY_LDT_SYSCALL
	address_markers[LDT_NR].start_address = LDT_BASE_ADDR;
#endif
#endif
#ifdef CONFIG_X86_32
	address_markers[VMALLOC_START_NR].start_address = VMALLOC_START;