1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_X86_SPARSEMEM_H
3#define _ASM_X86_SPARSEMEM_H
4
5#include <linux/types.h>
6
7#ifdef CONFIG_SPARSEMEM
8/*
9 * generic non-linear memory support:
10 *
11 * 1) we will not split memory into more chunks than will fit into the flags
12 * field of the struct page
13 *
14 * SECTION_SIZE_BITS 2^n: size of each section
15 * MAX_PHYSMEM_BITS 2^n: max size of physical address space
16 *
17 */
18
19#ifdef CONFIG_X86_32
20# ifdef CONFIG_X86_PAE
21# define SECTION_SIZE_BITS 29
22# define MAX_PHYSMEM_BITS 36
23# else
24# define SECTION_SIZE_BITS 26
25# define MAX_PHYSMEM_BITS 32
26# endif
27#else /* CONFIG_X86_32 */
28# define SECTION_SIZE_BITS 27 /* matt - 128 is convenient right now */
29# define MAX_PHYSMEM_BITS (pgtable_l5_enabled() ? 52 : 46)
30#endif
31
32#endif /* CONFIG_SPARSEMEM */
33
34#ifndef __ASSEMBLY__
35#ifdef CONFIG_NUMA_KEEP_MEMINFO
36extern int phys_to_target_node(phys_addr_t start);
37#define phys_to_target_node phys_to_target_node
38extern int memory_add_physaddr_to_nid(u64 start);
39#define memory_add_physaddr_to_nid memory_add_physaddr_to_nid
40extern int numa_fill_memblks(u64 start, u64 end);
41#define numa_fill_memblks numa_fill_memblks
42#endif
43#endif /* __ASSEMBLY__ */
44
45#endif /* _ASM_X86_SPARSEMEM_H */
46

source code of linux/arch/x86/include/asm/sparsemem.h