aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/memory_hotplug.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/memory_hotplug.h')
-rw-r--r--include/linux/memory_hotplug.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
index 29c1472efad0..c6fd2c0323fc 100644
--- a/include/linux/memory_hotplug.h
+++ b/include/linux/memory_hotplug.h
@@ -73,6 +73,61 @@ static inline int memory_add_physaddr_to_nid(u64 start)
73} 73}
74#endif 74#endif
75 75
76#ifdef CONFIG_HAVE_ARCH_NODEDATA_EXTENSION
77/*
78 * For supporting node-hotadd, we have to allocate a new pgdat.
79 *
80 * If an arch has generic style NODE_DATA(),
81 * node_data[nid] = kzalloc() works well. But it depends on the architecture.
82 *
83 * In general, generic_alloc_nodedata() is used.
84 * Now, arch_free_nodedata() is just defined for error path of node_hot_add.
85 *
86 */
87static inline pg_data_t *arch_alloc_nodedata(int nid)
88{
89 return NULL;
90}
91static inline void arch_free_nodedata(pg_data_t *pgdat)
92{
93}
94
95#else /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */
96
97#define arch_alloc_nodedata(nid) generic_alloc_nodedata(nid)
98#define arch_free_nodedata(pgdat) generic_free_nodedata(pgdat)
99
100#ifdef CONFIG_NUMA
101/*
102 * If ARCH_HAS_NODEDATA_EXTENSION=n, this func is used to allocate pgdat.
103 * XXX: kmalloc_node() can't work well to get new node's memory at this time.
104 * Because, pgdat for the new node is not allocated/initialized yet itself.
105 * To use new node's memory, more consideration will be necessary.
106 */
107#define generic_alloc_nodedata(nid) \
108({ \
109 kzalloc(sizeof(pg_data_t), GFP_KERNEL); \
110})
111/*
112 * This definition is just for error path in node hotadd.
113 * For node hotremove, we have to replace this.
114 */
115#define generic_free_nodedata(pgdat) kfree(pgdat)
116
117#else /* !CONFIG_NUMA */
118
119/* never called */
120static inline pg_data_t *generic_alloc_nodedata(int nid)
121{
122 BUG();
123 return NULL;
124}
125static inline void generic_free_nodedata(pg_data_t *pgdat)
126{
127}
128#endif /* CONFIG_NUMA */
129#endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */
130
76#else /* ! CONFIG_MEMORY_HOTPLUG */ 131#else /* ! CONFIG_MEMORY_HOTPLUG */
77/* 132/*
78 * Stub functions for when hotplug is off 133 * Stub functions for when hotplug is off