1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __NUMA_MEMBLKS_H 3 #define __NUMA_MEMBLKS_H 4 5 #ifdef CONFIG_NUMA_MEMBLKS 6 #include <linux/types.h> 7 8 #define NR_NODE_MEMBLKS (MAX_NUMNODES * 2) 9 10 extern int numa_distance_cnt; 11 void __init numa_set_distance(int from, int to, int distance); 12 void __init numa_reset_distance(void); 13 14 struct numa_memblk { 15 u64 start; 16 u64 end; 17 int nid; 18 }; 19 20 struct numa_meminfo { 21 int nr_blks; 22 struct numa_memblk blk[NR_NODE_MEMBLKS]; 23 }; 24 25 extern struct numa_meminfo numa_meminfo __initdata_or_meminfo; 26 extern struct numa_meminfo numa_reserved_meminfo __initdata_or_meminfo; 27 28 int __init numa_add_memblk(int nodeid, u64 start, u64 end); 29 void __init numa_remove_memblk_from(int idx, struct numa_meminfo *mi); 30 31 int __init numa_cleanup_meminfo(struct numa_meminfo *mi); 32 int __init numa_register_meminfo(struct numa_meminfo *mi); 33 34 void __init numa_nodemask_from_meminfo(nodemask_t *nodemask, 35 const struct numa_meminfo *mi); 36 37 int __init numa_memblks_init(int (*init_func)(void), 38 bool memblock_force_top_down); 39 40 #ifdef CONFIG_NUMA_EMU 41 int numa_emu_cmdline(char *str); 42 void __init numa_emu_update_cpu_to_node(int *emu_nid_to_phys, 43 unsigned int nr_emu_nids); 44 u64 __init numa_emu_dma_end(void); 45 void __init numa_emulation(struct numa_meminfo *numa_meminfo, 46 int numa_dist_cnt); 47 #else 48 static inline void numa_emulation(struct numa_meminfo *numa_meminfo, 49 int numa_dist_cnt) 50 { } 51 static inline int numa_emu_cmdline(char *str) 52 { 53 return -EINVAL; 54 } 55 #endif /* CONFIG_NUMA_EMU */ 56 57 #endif /* CONFIG_NUMA_MEMBLKS */ 58 59 #endif /* __NUMA_MEMBLKS_H */ 60