at v4.18-rc6 3.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * include/linux/node.h - generic node definition 4 * 5 * This is mainly for topological representation. We define the 6 * basic 'struct node' here, which can be embedded in per-arch 7 * definitions of processors. 8 * 9 * Basic handling of the devices is done in drivers/base/node.c 10 * and system devices are handled in drivers/base/sys.c. 11 * 12 * Nodes are exported via driverfs in the class/node/devices/ 13 * directory. 14 */ 15#ifndef _LINUX_NODE_H_ 16#define _LINUX_NODE_H_ 17 18#include <linux/device.h> 19#include <linux/cpumask.h> 20#include <linux/workqueue.h> 21 22struct node { 23 struct device dev; 24 25#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_HUGETLBFS) 26 struct work_struct node_work; 27#endif 28}; 29 30struct memory_block; 31extern struct node *node_devices[]; 32typedef void (*node_registration_func_t)(struct node *); 33 34#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_NUMA) 35extern int link_mem_sections(int nid, unsigned long start_pfn, 36 unsigned long nr_pages, bool check_nid); 37#else 38static inline int link_mem_sections(int nid, unsigned long start_pfn, 39 unsigned long nr_pages, bool check_nid) 40{ 41 return 0; 42} 43#endif 44 45extern void unregister_node(struct node *node); 46#ifdef CONFIG_NUMA 47/* Core of the node registration - only memory hotplug should use this */ 48extern int __register_one_node(int nid); 49 50/* Registers an online node */ 51static inline int register_one_node(int nid) 52{ 53 int error = 0; 54 55 if (node_online(nid)) { 56 struct pglist_data *pgdat = NODE_DATA(nid); 57 58 error = __register_one_node(nid); 59 if (error) 60 return error; 61 /* link memory sections under this node */ 62 error = link_mem_sections(nid, pgdat->node_start_pfn, pgdat->node_spanned_pages, true); 63 } 64 65 return error; 66} 67 68extern void unregister_one_node(int nid); 69extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); 70extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); 71extern int register_mem_sect_under_node(struct memory_block *mem_blk, 72 int nid, bool check_nid); 73extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk, 74 unsigned long phys_index); 75 76#ifdef CONFIG_HUGETLBFS 77extern void register_hugetlbfs_with_node(node_registration_func_t doregister, 78 node_registration_func_t unregister); 79#endif 80#else 81static inline int __register_one_node(int nid) 82{ 83 return 0; 84} 85static inline int register_one_node(int nid) 86{ 87 return 0; 88} 89static inline int unregister_one_node(int nid) 90{ 91 return 0; 92} 93static inline int register_cpu_under_node(unsigned int cpu, unsigned int nid) 94{ 95 return 0; 96} 97static inline int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) 98{ 99 return 0; 100} 101static inline int register_mem_sect_under_node(struct memory_block *mem_blk, 102 int nid, bool check_nid) 103{ 104 return 0; 105} 106static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk, 107 unsigned long phys_index) 108{ 109 return 0; 110} 111 112static inline void register_hugetlbfs_with_node(node_registration_func_t reg, 113 node_registration_func_t unreg) 114{ 115} 116#endif 117 118#define to_node(device) container_of(device, struct node, dev) 119 120#endif /* _LINUX_NODE_H_ */