xen/balloon: account for pages released during memory setup
[pandora-kernel.git] / arch / x86 / xen / setup.c
index c3b8d44..c983717 100644 (file)
@@ -39,6 +39,9 @@ extern void xen_syscall32_target(void);
 /* Amount of extra memory space we add to the e820 ranges */
 phys_addr_t xen_extra_mem_start, xen_extra_mem_size;
 
+/* Number of pages released from the initial allocation. */
+unsigned long xen_released_pages;
+
 /* 
  * The maximum amount of extra memory compared to the base size.  The
  * main scaling factor is the size of struct page.  At extreme ratios
@@ -306,12 +309,16 @@ char * __init xen_memory_setup(void)
        sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
 
        extra_limit = xen_get_max_pages();
-       if (extra_limit >= max_pfn)
-               extra_pages = extra_limit - max_pfn;
-       else
-               extra_pages = 0;
+       if (max_pfn + extra_pages > extra_limit) {
+               if (extra_limit > max_pfn)
+                       extra_pages = extra_limit - max_pfn;
+               else
+                       extra_pages = 0;
+       }
 
-       extra_pages += xen_return_unused_memory(xen_start_info->nr_pages, &e820);
+       xen_released_pages = xen_return_unused_memory(xen_start_info->nr_pages,
+                                                     &e820);
+       extra_pages += xen_released_pages;
 
        /*
         * Clamp the amount of extra memory to a EXTRA_MEM_RATIO