WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH R2 1/7] mm: Add add_registered_memory() to memory hot

add_registered_memory() adds memory ealier registered
as memory resource. It is required by memory hotplug
for Xen guests, however it could be used also by other
modules.

Signed-off-by: Daniel Kiper <dkiper@xxxxxxxxxxxx>
---
 include/linux/memory_hotplug.h |    1 +
 mm/memory_hotplug.c            |   50 ++++++++++++++++++++++++++++++---------
 2 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
index 864035f..2458b2f 100644
--- a/include/linux/memory_hotplug.h
+++ b/include/linux/memory_hotplug.h
@@ -203,6 +203,7 @@ static inline int is_mem_section_removable(unsigned long 
pfn,
 #endif /* CONFIG_MEMORY_HOTREMOVE */
 
 extern int mem_online_node(int nid);
+extern int add_registered_memory(int nid, u64 start, u64 size);
 extern int add_memory(int nid, u64 start, u64 size);
 extern int arch_add_memory(int nid, u64 start, u64 size);
 extern int remove_memory(u64 start, u64 size);
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index dd186c1..b642f26 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -509,20 +509,12 @@ out:
 }
 
 /* we are OK calling __meminit stuff here - we have CONFIG_MEMORY_HOTPLUG */
-int __ref add_memory(int nid, u64 start, u64 size)
+static int __ref __add_memory(int nid, u64 start, u64 size)
 {
        pg_data_t *pgdat = NULL;
        int new_pgdat = 0;
-       struct resource *res;
        int ret;
 
-       lock_system_sleep();
-
-       res = register_memory_resource(start, size);
-       ret = -EEXIST;
-       if (!res)
-               goto out;
-
        if (!node_online(nid)) {
                pgdat = hotadd_new_pgdat(nid, start);
                ret = -ENOMEM;
@@ -556,14 +548,48 @@ int __ref add_memory(int nid, u64 start, u64 size)
        goto out;
 
 error:
-       /* rollback pgdat allocation and others */
+       /* rollback pgdat allocation */
        if (new_pgdat)
                rollback_node_hotadd(nid, pgdat);
-       if (res)
-               release_memory_resource(res);
+
+out:
+       return ret;
+}
+
+int add_registered_memory(int nid, u64 start, u64 size)
+{
+       int ret;
+
+       lock_system_sleep();
+       ret = __add_memory(nid, start, size);
+       unlock_system_sleep();
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(add_registered_memory);
+
+int add_memory(int nid, u64 start, u64 size)
+{
+       int ret = -EEXIST;
+       struct resource *res;
+
+       lock_system_sleep();
+
+       res = register_memory_resource(start, size);
+
+       if (!res)
+               goto out;
+
+       ret = __add_memory(nid, start, size);
+
+       if (!ret)
+               goto out;
+
+       release_memory_resource(res);
 
 out:
        unlock_system_sleep();
+
        return ret;
 }
 EXPORT_SYMBOL_GPL(add_memory);
-- 
1.4.4.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>