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 26struct 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 34struct memory_block; 35extern struct node node_devices[]; 36typedef void (*node_registration_func_t)(struct node *); 37 38extern int register_node(struct node *, int, struct node *); 39extern void unregister_node(struct node *node); 40#ifdef CONFIG_NUMA 41extern int register_one_node(int nid); 42extern void unregister_one_node(int nid); 43extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); 44extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); 45extern int register_mem_sect_under_node(struct memory_block *mem_blk, 46 int nid); 47extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk); 48 49#ifdef CONFIG_HUGETLBFS 50extern void register_hugetlbfs_with_node(node_registration_func_t doregister, 51 node_registration_func_t unregister); 52#endif 53#else 54static inline int register_one_node(int nid) 55{ 56 return 0; 57} 58static inline int unregister_one_node(int nid) 59{ 60 return 0; 61} 62static inline int register_cpu_under_node(unsigned int cpu, unsigned int nid) 63{ 64 return 0; 65} 66static inline int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) 67{ 68 return 0; 69} 70static inline int register_mem_sect_under_node(struct memory_block *mem_blk, 71 int nid) 72{ 73 return 0; 74} 75static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk) 76{ 77 return 0; 78} 79 80static 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