return res;
}
+static void balloon_add_region(unsigned long start_pfn,
+ unsigned long pages)
+{
+ unsigned long pfn, extra_pfn_end;
+
+ /*
+ * If the amount of usable memory has been limited (e.g., with
+ * the 'mem' command line parameter), don't add pages beyond
+ * this limit.
+ */
+ extra_pfn_end = min(max_pfn, start_pfn + pages);
+ if (extra_pfn_end == max_pfn)
+ printk("extra_pfn_end %lx max_pfn %lx new limit %lx\n",
+ extra_pfn_end, max_pfn, start_pfn + pages);
+
+ for (pfn = start_pfn; pfn < extra_pfn_end; pfn++) {
+ /* totalram_pages and totalhigh_pages do not
+ include the boot-time balloon extension, so
+ don't subtract from it. */
+ balloon_append(pfn_to_page(pfn));
+ }
+
+ balloon_stats.total_pages += extra_pfn_end - start_pfn;
+}
+
static enum bp_state reserve_additional_memory(void)
{
long credit;
goto err;
}
- balloon_stats.total_pages += balloon_hotplug;
+ balloon_add_region(PFN_DOWN(resource->start),
+ PFN_DOWN(resource->end - resource->start));
return BP_WAIT;
err:
out_undo:
mutex_unlock(&balloon_mutex);
free_xenballooned_pages(pgno, pages);
+ balloon_stats.target_unpopulated -= nr_pages - pgno;
return ret;
}
EXPORT_SYMBOL(alloc_xenballooned_pages);
}
EXPORT_SYMBOL(free_xenballooned_pages);
-#ifdef CONFIG_XEN_PV
-static void __init balloon_add_region(unsigned long start_pfn,
- unsigned long pages)
-{
- unsigned long pfn, extra_pfn_end;
-
- /*
- * If the amount of usable memory has been limited (e.g., with
- * the 'mem' command line parameter), don't add pages beyond
- * this limit.
- */
- extra_pfn_end = min(max_pfn, start_pfn + pages);
-
- for (pfn = start_pfn; pfn < extra_pfn_end; pfn++) {
- /* totalram_pages and totalhigh_pages do not
- include the boot-time balloon extension, so
- don't subtract from it. */
- balloon_append(pfn_to_page(pfn));
- }
-
- balloon_stats.total_pages += extra_pfn_end - start_pfn;
-}
-#endif
-
static int __init balloon_init(void)
{
if (!xen_domain())