xref: /openbmc/linux/include/linux/numa.h (revision eb38c5ed)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef _LINUX_NUMA_H
31da177e4SLinus Torvalds #define _LINUX_NUMA_H
45d30f92eSDan Williams #include <linux/types.h>
51da177e4SLinus Torvalds 
6c80d79d7SYasunori Goto #ifdef CONFIG_NODES_SHIFT
7c80d79d7SYasunori Goto #define NODES_SHIFT     CONFIG_NODES_SHIFT
8c80d79d7SYasunori Goto #else
91da177e4SLinus Torvalds #define NODES_SHIFT     0
101da177e4SLinus Torvalds #endif
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #define MAX_NUMNODES    (1 << NODES_SHIFT)
131da177e4SLinus Torvalds 
144e25b257SLee Schermerhorn #define	NUMA_NO_NODE	(-1)
15*eb38c5edSAlison Schofield #define	NUMA_NO_MEMBLK	(-1)
164e25b257SLee Schermerhorn 
171e5d8e1eSDan Williams /* optionally keep NUMA memory info available post init */
181e5d8e1eSDan Williams #ifdef CONFIG_NUMA_KEEP_MEMINFO
191e5d8e1eSDan Williams #define __initdata_or_meminfo
201e5d8e1eSDan Williams #else
211e5d8e1eSDan Williams #define __initdata_or_meminfo __initdata
221e5d8e1eSDan Williams #endif
231e5d8e1eSDan Williams 
24b2ca916cSDan Williams #ifdef CONFIG_NUMA
25a927bd6bSDan Williams #include <linux/printk.h>
26a927bd6bSDan Williams #include <asm/sparsemem.h>
27a927bd6bSDan Williams 
285d30f92eSDan Williams /* Generic implementation available */
2952cacc5cSYury Norov int numa_nearest_node(int node, unsigned int state);
30a927bd6bSDan Williams 
31a927bd6bSDan Williams #ifndef memory_add_physaddr_to_nid
memory_add_physaddr_to_nid(u64 start)32a927bd6bSDan Williams static inline int memory_add_physaddr_to_nid(u64 start)
33a927bd6bSDan Williams {
34a927bd6bSDan Williams 	pr_info_once("Unknown online node for memory at 0x%llx, assuming node 0\n",
35a927bd6bSDan Williams 			start);
36a927bd6bSDan Williams 	return 0;
37a927bd6bSDan Williams }
38a927bd6bSDan Williams #endif
39a927bd6bSDan Williams #ifndef phys_to_target_node
phys_to_target_node(u64 start)40a927bd6bSDan Williams static inline int phys_to_target_node(u64 start)
41a927bd6bSDan Williams {
42a927bd6bSDan Williams 	pr_info_once("Unknown target node for memory at 0x%llx, assuming node 0\n",
43a927bd6bSDan Williams 			start);
44a927bd6bSDan Williams 	return 0;
45a927bd6bSDan Williams }
46a927bd6bSDan Williams #endif
47*eb38c5edSAlison Schofield #ifndef numa_fill_memblks
numa_fill_memblks(u64 start,u64 end)48*eb38c5edSAlison Schofield static inline int __init numa_fill_memblks(u64 start, u64 end)
49*eb38c5edSAlison Schofield {
50*eb38c5edSAlison Schofield 	return NUMA_NO_MEMBLK;
51*eb38c5edSAlison Schofield }
52*eb38c5edSAlison Schofield #endif
53a927bd6bSDan Williams #else /* !CONFIG_NUMA */
numa_nearest_node(int node,unsigned int state)5452cacc5cSYury Norov static inline int numa_nearest_node(int node, unsigned int state)
55b2ca916cSDan Williams {
56b2ca916cSDan Williams 	return NUMA_NO_NODE;
57b2ca916cSDan Williams }
5852cacc5cSYury Norov 
memory_add_physaddr_to_nid(u64 start)59a927bd6bSDan Williams static inline int memory_add_physaddr_to_nid(u64 start)
60a927bd6bSDan Williams {
61a927bd6bSDan Williams 	return 0;
62a927bd6bSDan Williams }
phys_to_target_node(u64 start)63a927bd6bSDan Williams static inline int phys_to_target_node(u64 start)
64a927bd6bSDan Williams {
65a927bd6bSDan Williams 	return 0;
66a927bd6bSDan Williams }
67b2ca916cSDan Williams #endif
68b2ca916cSDan Williams 
6952cacc5cSYury Norov #define numa_map_to_online_node(node) numa_nearest_node(node, N_ONLINE)
7052cacc5cSYury Norov 
7150468e43SJarkko Sakkinen #ifdef CONFIG_HAVE_ARCH_NODE_DEV_GROUP
7250468e43SJarkko Sakkinen extern const struct attribute_group arch_node_dev_group;
7350468e43SJarkko Sakkinen #endif
7450468e43SJarkko Sakkinen 
751da177e4SLinus Torvalds #endif /* _LINUX_NUMA_H */
76