|
@@ -47,6 +47,10 @@ struct memblock {
|
|
|
|
|
|
extern struct memblock memblock;
|
|
|
extern int memblock_debug;
|
|
|
+#ifdef CONFIG_MOVABLE_NODE
|
|
|
+/* If movable_node boot option specified */
|
|
|
+extern bool movable_node_enabled;
|
|
|
+#endif /* CONFIG_MOVABLE_NODE */
|
|
|
|
|
|
#define memblock_dbg(fmt, ...) \
|
|
|
if (memblock_debug) printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
|
|
@@ -65,6 +69,26 @@ int memblock_reserve(phys_addr_t base, phys_addr_t size);
|
|
|
void memblock_trim_memory(phys_addr_t align);
|
|
|
int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size);
|
|
|
int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size);
|
|
|
+#ifdef CONFIG_MOVABLE_NODE
|
|
|
+static inline bool memblock_is_hotpluggable(struct memblock_region *m)
|
|
|
+{
|
|
|
+ return m->flags & MEMBLOCK_HOTPLUG;
|
|
|
+}
|
|
|
+
|
|
|
+static inline bool movable_node_is_enabled(void)
|
|
|
+{
|
|
|
+ return movable_node_enabled;
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline bool memblock_is_hotpluggable(struct memblock_region *m)
|
|
|
+{
|
|
|
+ return false;
|
|
|
+}
|
|
|
+static inline bool movable_node_is_enabled(void)
|
|
|
+{
|
|
|
+ return false;
|
|
|
+}
|
|
|
+#endif
|
|
|
|
|
|
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
|
|
|
int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn,
|