blob: 28f5dae25db6bedf425b028239d699b0362e48c0 [file] [log] [blame]
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_POWERPC_SPARSEMEM_H
3#define _ASM_POWERPC_SPARSEMEM_H 1
4#ifdef __KERNEL__
5
6#ifdef CONFIG_SPARSEMEM
7/*
8 * SECTION_SIZE_BITS 2^N: how big each section will be
9 * MAX_PHYSMEM_BITS 2^N: how much memory we can have in that space
10 */
11#define SECTION_SIZE_BITS 24
12/*
13 * If we store section details in page->flags we can't increase the MAX_PHYSMEM_BITS
14 * if we increase SECTIONS_WIDTH we will not store node details in page->flags and
15 * page_to_nid does a page->section->node lookup
16 * Hence only increase for VMEMMAP.
17 */
18#ifdef CONFIG_SPARSEMEM_VMEMMAP
19#define MAX_PHYSMEM_BITS 47
20#else
21#define MAX_PHYSMEM_BITS 46
22#endif
23
24#endif /* CONFIG_SPARSEMEM */
25
26#ifdef CONFIG_MEMORY_HOTPLUG
27extern int create_section_mapping(unsigned long start, unsigned long end, int nid);
28extern int remove_section_mapping(unsigned long start, unsigned long end);
29
30#ifdef CONFIG_PPC_BOOK3S_64
31extern void resize_hpt_for_hotplug(unsigned long new_mem_size);
32#else
33static inline void resize_hpt_for_hotplug(unsigned long new_mem_size) { }
34#endif
35
36#ifdef CONFIG_NUMA
37extern int hot_add_scn_to_nid(unsigned long scn_addr);
38#else
39static inline int hot_add_scn_to_nid(unsigned long scn_addr)
40{
41 return 0;
42}
43#endif /* CONFIG_NUMA */
44#endif /* CONFIG_MEMORY_HOTPLUG */
45
46#endif /* __KERNEL__ */
47#endif /* _ASM_POWERPC_SPARSEMEM_H */