GNU Linux-libre 4.14.324-gnu1
[releases.git] / arch / x86 / include / asm / sparsemem.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_X86_SPARSEMEM_H
3 #define _ASM_X86_SPARSEMEM_H
4
5 #ifdef CONFIG_SPARSEMEM
6 /*
7  * generic non-linear memory support:
8  *
9  * 1) we will not split memory into more chunks than will fit into the flags
10  *    field of the struct page
11  *
12  * SECTION_SIZE_BITS            2^n: size of each section
13  * MAX_PHYSADDR_BITS            2^n: max size of physical address space
14  * MAX_PHYSMEM_BITS             2^n: how much memory we can have in that space
15  *
16  */
17
18 #ifdef CONFIG_X86_32
19 # ifdef CONFIG_X86_PAE
20 #  define SECTION_SIZE_BITS     29
21 #  define MAX_PHYSADDR_BITS     36
22 #  define MAX_PHYSMEM_BITS      36
23 # else
24 #  define SECTION_SIZE_BITS     26
25 #  define MAX_PHYSADDR_BITS     32
26 #  define MAX_PHYSMEM_BITS      32
27 # endif
28 #else /* CONFIG_X86_32 */
29 # define SECTION_SIZE_BITS      27 /* matt - 128 is convenient right now */
30 # ifdef CONFIG_X86_5LEVEL
31 #  define MAX_PHYSADDR_BITS     52
32 #  define MAX_PHYSMEM_BITS      52
33 # else
34 #  define MAX_PHYSADDR_BITS     44
35 #  define MAX_PHYSMEM_BITS      46
36 # endif
37 #endif
38
39 #endif /* CONFIG_SPARSEMEM */
40 #endif /* _ASM_X86_SPARSEMEM_H */