|
@@ -73,6 +73,61 @@ static inline int memory_add_physaddr_to_nid(u64 start)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_HAVE_ARCH_NODEDATA_EXTENSION
|
|
|
+/*
|
|
|
+ * For supporting node-hotadd, we have to allocate a new pgdat.
|
|
|
+ *
|
|
|
+ * If an arch has generic style NODE_DATA(),
|
|
|
+ * node_data[nid] = kzalloc() works well. But it depends on the architecture.
|
|
|
+ *
|
|
|
+ * In general, generic_alloc_nodedata() is used.
|
|
|
+ * Now, arch_free_nodedata() is just defined for error path of node_hot_add.
|
|
|
+ *
|
|
|
+ */
|
|
|
+static inline pg_data_t *arch_alloc_nodedata(int nid)
|
|
|
+{
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+static inline void arch_free_nodedata(pg_data_t *pgdat)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+#else /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */
|
|
|
+
|
|
|
+#define arch_alloc_nodedata(nid) generic_alloc_nodedata(nid)
|
|
|
+#define arch_free_nodedata(pgdat) generic_free_nodedata(pgdat)
|
|
|
+
|
|
|
+#ifdef CONFIG_NUMA
|
|
|
+/*
|
|
|
+ * If ARCH_HAS_NODEDATA_EXTENSION=n, this func is used to allocate pgdat.
|
|
|
+ * XXX: kmalloc_node() can't work well to get new node's memory at this time.
|
|
|
+ * Because, pgdat for the new node is not allocated/initialized yet itself.
|
|
|
+ * To use new node's memory, more consideration will be necessary.
|
|
|
+ */
|
|
|
+#define generic_alloc_nodedata(nid) \
|
|
|
+({ \
|
|
|
+ kzalloc(sizeof(pg_data_t), GFP_KERNEL); \
|
|
|
+})
|
|
|
+/*
|
|
|
+ * This definition is just for error path in node hotadd.
|
|
|
+ * For node hotremove, we have to replace this.
|
|
|
+ */
|
|
|
+#define generic_free_nodedata(pgdat) kfree(pgdat)
|
|
|
+
|
|
|
+#else /* !CONFIG_NUMA */
|
|
|
+
|
|
|
+/* never called */
|
|
|
+static inline pg_data_t *generic_alloc_nodedata(int nid)
|
|
|
+{
|
|
|
+ BUG();
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+static inline void generic_free_nodedata(pg_data_t *pgdat)
|
|
|
+{
|
|
|
+}
|
|
|
+#endif /* CONFIG_NUMA */
|
|
|
+#endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */
|
|
|
+
|
|
|
#else /* ! CONFIG_MEMORY_HOTPLUG */
|
|
|
/*
|
|
|
* Stub functions for when hotplug is off
|