forked from Minki/linux
162434e7f5
For boot-time switching between paging modes, we need to be able to adjust size of physical address space at runtime. As part of making physical address space size variable, we have to make X86_5LEVEL dependent on SPARSEMEM_VMEMMAP. !SPARSEMEM_VMEMMAP configuration doesn't build with variable MAX_PHYSMEM_BITS. For !SPARSEMEM_VMEMMAP SECTIONS_WIDTH depends on MAX_PHYSMEM_BITS: SECTIONS_WIDTH SECTIONS_SHIFT MAX_PHYSMEM_BITS And SECTIONS_WIDTH is used on pre-processor stage, it doesn't work if it's dyncamic. See include/linux/page-flags-layout.h. Effect on kernel image size: text data bss dec hex filename 8628393 4734340 1368064 14730797 e0c62d vmlinux.before 8628892 4734340 1368064 14731296 e0c820 vmlinux.after Signed-off-by: Kirill 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-8-kirill.shutemov@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
36 lines
990 B
C
36 lines
990 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_SPARSEMEM_H
|
|
#define _ASM_X86_SPARSEMEM_H
|
|
|
|
#ifdef CONFIG_SPARSEMEM
|
|
/*
|
|
* generic non-linear memory support:
|
|
*
|
|
* 1) we will not split memory into more chunks than will fit into the flags
|
|
* field of the struct page
|
|
*
|
|
* SECTION_SIZE_BITS 2^n: size of each section
|
|
* MAX_PHYSADDR_BITS 2^n: max size of physical address space
|
|
* MAX_PHYSMEM_BITS 2^n: how much memory we can have in that space
|
|
*
|
|
*/
|
|
|
|
#ifdef CONFIG_X86_32
|
|
# ifdef CONFIG_X86_PAE
|
|
# define SECTION_SIZE_BITS 29
|
|
# define MAX_PHYSADDR_BITS 36
|
|
# define MAX_PHYSMEM_BITS 36
|
|
# else
|
|
# define SECTION_SIZE_BITS 26
|
|
# define MAX_PHYSADDR_BITS 32
|
|
# define MAX_PHYSMEM_BITS 32
|
|
# endif
|
|
#else /* CONFIG_X86_32 */
|
|
# define SECTION_SIZE_BITS 27 /* matt - 128 is convenient right now */
|
|
# define MAX_PHYSADDR_BITS (pgtable_l5_enabled ? 52 : 44)
|
|
# define MAX_PHYSMEM_BITS (pgtable_l5_enabled ? 52 : 46)
|
|
#endif
|
|
|
|
#endif /* CONFIG_SPARSEMEM */
|
|
#endif /* _ASM_X86_SPARSEMEM_H */
|