xref: /linux-6.15/include/linux/numa.h (revision 16d79f2a)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef _LINUX_NUMA_H
31da177e4SLinus Torvalds #define _LINUX_NUMA_H
4d7a73e3fSKent Overstreet #include <linux/init.h>
55d30f92eSDan Williams #include <linux/types.h>
614a8262fSYury Norov #include <linux/nodemask.h>
71da177e4SLinus Torvalds 
88f012db2SAlison Schofield #define	NUMA_NO_MEMBLK	(-1)
94e25b257SLee Schermerhorn 
numa_valid_node(int nid)108043832eSMike Rapoport (IBM) static inline bool numa_valid_node(int nid)
118043832eSMike Rapoport (IBM) {
128043832eSMike Rapoport (IBM) 	return nid >= 0 && nid < MAX_NUMNODES;
138043832eSMike Rapoport (IBM) }
148043832eSMike Rapoport (IBM) 
151e5d8e1eSDan Williams /* optionally keep NUMA memory info available post init */
161e5d8e1eSDan Williams #ifdef CONFIG_NUMA_KEEP_MEMINFO
171e5d8e1eSDan Williams #define __initdata_or_meminfo
181e5d8e1eSDan Williams #else
191e5d8e1eSDan Williams #define __initdata_or_meminfo __initdata
201e5d8e1eSDan Williams #endif
211e5d8e1eSDan Williams 
22b2ca916cSDan Williams #ifdef CONFIG_NUMA
23a927bd6bSDan Williams #include <asm/sparsemem.h>
24a927bd6bSDan Williams 
2546bcce50SMike Rapoport (Microsoft) extern struct pglist_data *node_data[];
2646bcce50SMike Rapoport (Microsoft) #define NODE_DATA(nid)	(node_data[nid])
2746bcce50SMike Rapoport (Microsoft) 
283515863dSMike Rapoport (Microsoft) void __init alloc_node_data(int nid);
29ec164cf1SMike Rapoport (Microsoft) void __init alloc_offline_node_data(int nid);
30ec164cf1SMike Rapoport (Microsoft) 
315d30f92eSDan Williams /* Generic implementation available */
32b1f099b1SYury Norov int numa_nearest_node(int node, unsigned int state);
33a927bd6bSDan Williams 
34*16d79f2aSAndrea Righi int nearest_node_nodemask(int node, nodemask_t *mask);
35*16d79f2aSAndrea Righi 
36a927bd6bSDan Williams #ifndef memory_add_physaddr_to_nid
37d7a73e3fSKent Overstreet int memory_add_physaddr_to_nid(u64 start);
38a927bd6bSDan Williams #endif
39d7a73e3fSKent Overstreet 
40a927bd6bSDan Williams #ifndef phys_to_target_node
41d7a73e3fSKent Overstreet int phys_to_target_node(u64 start);
42a927bd6bSDan Williams #endif
43d7a73e3fSKent Overstreet 
44f9f67e5aSRobert Richter int numa_fill_memblks(u64 start, u64 end);
45d7a73e3fSKent Overstreet 
46a927bd6bSDan Williams #else /* !CONFIG_NUMA */
numa_nearest_node(int node,unsigned int state)47b1f099b1SYury Norov static inline int numa_nearest_node(int node, unsigned int state)
48b2ca916cSDan Williams {
49b2ca916cSDan Williams 	return NUMA_NO_NODE;
50b2ca916cSDan Williams }
51b1f099b1SYury Norov 
nearest_node_nodemask(int node,nodemask_t * mask)52*16d79f2aSAndrea Righi static inline int nearest_node_nodemask(int node, nodemask_t *mask)
53*16d79f2aSAndrea Righi {
54*16d79f2aSAndrea Righi 	return NUMA_NO_NODE;
55*16d79f2aSAndrea Righi }
56*16d79f2aSAndrea Righi 
memory_add_physaddr_to_nid(u64 start)57a927bd6bSDan Williams static inline int memory_add_physaddr_to_nid(u64 start)
58a927bd6bSDan Williams {
59a927bd6bSDan Williams 	return 0;
60a927bd6bSDan Williams }
phys_to_target_node(u64 start)61a927bd6bSDan Williams static inline int phys_to_target_node(u64 start)
62a927bd6bSDan Williams {
63a927bd6bSDan Williams 	return 0;
64a927bd6bSDan Williams }
65ec164cf1SMike Rapoport (Microsoft) 
alloc_offline_node_data(int nid)66ec164cf1SMike Rapoport (Microsoft) static inline void alloc_offline_node_data(int nid) {}
67b2ca916cSDan Williams #endif
68b2ca916cSDan Williams 
69b1f099b1SYury Norov #define numa_map_to_online_node(node) numa_nearest_node(node, N_ONLINE)
70b1f099b1SYury 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