1 /* 2 * include/linux/node.h - generic node definition 3 * 4 * This is mainly for topological representation. We define the 5 * basic 'struct node' here, which can be embedded in per-arch 6 * definitions of processors. 7 * 8 * Basic handling of the devices is done in drivers/base/node.c 9 * and system devices are handled in drivers/base/sys.c. 10 * 11 * Nodes are exported via driverfs in the class/node/devices/ 12 * directory. 13 * 14 * Per-node interfaces can be implemented using a struct device_interface. 15 * See the following for how to do this: 16 * - drivers/base/intf.c 17 * - Documentation/driver-model/interface.txt 18 */ 19 #ifndef _LINUX_NODE_H_ 20 #define _LINUX_NODE_H_ 21 22 #include <linux/sysdev.h> 23 #include <linux/cpumask.h> 24 #include <linux/workqueue.h> 25 26 struct node { 27 struct sys_device sysdev; 28 29 #if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_HUGETLBFS) 30 struct work_struct node_work; 31 #endif 32 }; 33 34 struct memory_block; 35 extern struct node node_devices[]; 36 typedef void (*node_registration_func_t)(struct node *); 37 38 extern int register_node(struct node *, int, struct node *); 39 extern void unregister_node(struct node *node); 40 #ifdef CONFIG_NUMA 41 extern int register_one_node(int nid); 42 extern void unregister_one_node(int nid); 43 extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); 44 extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); 45 extern int register_mem_sect_under_node(struct memory_block *mem_blk, 46 int nid); 47 extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk); 48 49 #ifdef CONFIG_HUGETLBFS 50 extern void register_hugetlbfs_with_node(node_registration_func_t doregister, 51 node_registration_func_t unregister); 52 #endif 53 #else 54 static inline int register_one_node(int nid) 55 { 56 return 0; 57 } 58 static inline int unregister_one_node(int nid) 59 { 60 return 0; 61 } 62 static inline int register_cpu_under_node(unsigned int cpu, unsigned int nid) 63 { 64 return 0; 65 } 66 static inline int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) 67 { 68 return 0; 69 } 70 static inline int register_mem_sect_under_node(struct memory_block *mem_blk, 71 int nid) 72 { 73 return 0; 74 } 75 static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk) 76 { 77 return 0; 78 } 79 80 static inline void register_hugetlbfs_with_node(node_registration_func_t reg, 81 node_registration_func_t unreg) 82 { 83 } 84 #endif 85 86 #define to_node(sys_device) container_of(sys_device, struct node, sysdev) 87 88 #endif /* _LINUX_NODE_H_ */ 89