at v4.19-rc1 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 end_pfn); 37#else 38static inline int link_mem_sections(int nid, unsigned long start_pfn, 39 unsigned long end_pfn) 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 unsigned long start_pfn = pgdat->node_start_pfn; 58 unsigned long end_pfn = start_pfn + pgdat->node_spanned_pages; 59 60 error = __register_one_node(nid); 61 if (error) 62 return error; 63 /* link memory sections under this node */ 64 error = link_mem_sections(nid, start_pfn, end_pfn); 65 } 66 67 return error; 68} 69 70extern void unregister_one_node(int nid); 71extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); 72extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); 73extern int register_mem_sect_under_node(struct memory_block *mem_blk, 74 void *arg); 75extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk, 76 unsigned long phys_index); 77 78#ifdef CONFIG_HUGETLBFS 79extern void register_hugetlbfs_with_node(node_registration_func_t doregister, 80 node_registration_func_t unregister); 81#endif 82#else 83static inline int __register_one_node(int nid) 84{ 85 return 0; 86} 87static inline int register_one_node(int nid) 88{ 89 return 0; 90} 91static inline int unregister_one_node(int nid) 92{ 93 return 0; 94} 95static inline int register_cpu_under_node(unsigned int cpu, unsigned int nid) 96{ 97 return 0; 98} 99static inline int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) 100{ 101 return 0; 102} 103static inline int register_mem_sect_under_node(struct memory_block *mem_blk, 104 void *arg) 105{ 106 return 0; 107} 108static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk, 109 unsigned long phys_index) 110{ 111 return 0; 112} 113 114static inline void register_hugetlbfs_with_node(node_registration_func_t reg, 115 node_registration_func_t unreg) 116{ 117} 118#endif 119 120#define to_node(device) container_of(device, struct node, dev) 121 122#endif /* _LINUX_NODE_H_ */