]> xenbits.xensource.com Git - people/pauldu/mini-os.git/commitdiff
mini-os: get maximum memory size from hypervisor
authorJuergen Gross <jgross@suse.com>
Tue, 19 Jul 2016 05:23:02 +0000 (07:23 +0200)
committerJuergen Gross <jgross@suse.com>
Thu, 11 Aug 2016 11:03:57 +0000 (13:03 +0200)
Add support for obtaining the maximum memory size from the hypervisor.
This will make it possible to support ballooning.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
balloon.c
include/balloon.h
mm.c

index f9cf23b257199debf6759850be5a438d4bbde0db..1ec113d2b95f2c56d48156577fd31c40ef7c0f44 100644 (file)
--- a/balloon.c
+++ b/balloon.c
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <mini-os/os.h>
 #include <mini-os/balloon.h>
+#include <mini-os/lib.h>
+#include <xen/xen.h>
+#include <xen/memory.h>
+
+unsigned long nr_max_pages;
+
+void get_max_pages(void)
+{
+    long ret;
+    domid_t domid = DOMID_SELF;
+
+    ret = HYPERVISOR_memory_op(XENMEM_maximum_reservation, &domid);
+    if ( ret < 0 )
+    {
+        printk("Could not get maximum pfn\n");
+        return;
+    }
+
+    nr_max_pages = ret;
+    printk("Maximum memory size: %ld pages\n", nr_max_pages);
+}
index 9756a3fab6ad8bc919dabd0a22e9ce90479d46df..cd790179faa3f5dd915cd533cd7bee68c67e886c 100644 (file)
 
 #ifdef CONFIG_BALLOON
 
+extern unsigned long nr_max_pages;
+
+void get_max_pages(void);
+
 #else /* CONFIG_BALLOON */
 
+static inline void get_max_pages(void) { }
+
 #endif /* CONFIG_BALLOON */
 #endif /* _BALLOON_H_ */
diff --git a/mm.c b/mm.c
index 8cf32106e163de2683e10e3f08be10a43379cc28..6d82f2a7a9c3bb0171ac7d830b53ab8e47ef90f2 100644 (file)
--- a/mm.c
+++ b/mm.c
@@ -38,6 +38,7 @@
 #include <mini-os/hypervisor.h>
 #include <xen/memory.h>
 #include <mini-os/mm.h>
+#include <mini-os/balloon.h>
 #include <mini-os/types.h>
 #include <mini-os/lib.h>
 #include <mini-os/xmalloc.h>
@@ -361,6 +362,7 @@ void init_mm(void)
 
     printk("MM: Init\n");
 
+    get_max_pages();
     arch_init_mm(&start_pfn, &max_pfn);
     /*
      * now we can initialise the page allocator