summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/xen/setup.c7
-rw-r--r--drivers/xen/balloon.c4
-rw-r--r--include/xen/page.h2
3 files changed, 11 insertions, 2 deletions
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 46d6d21dbdb..c983717c018 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -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
@@ -313,7 +316,9 @@ char * __init xen_memory_setup(void)
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
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 5dfd8f8ff07..4f59fb37338 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -565,7 +565,9 @@ static int __init balloon_init(void)
pr_info("xen/balloon: Initialising balloon driver.\n");
- balloon_stats.current_pages = xen_pv_domain() ? min(xen_start_info->nr_pages, max_pfn) : max_pfn;
+ balloon_stats.current_pages = xen_pv_domain()
+ ? min(xen_start_info->nr_pages - xen_released_pages, max_pfn)
+ : max_pfn;
balloon_stats.target_pages = balloon_stats.current_pages;
balloon_stats.balloon_low = 0;
balloon_stats.balloon_high = 0;
diff --git a/include/xen/page.h b/include/xen/page.h
index 0be36b976f4..92b61f8c772 100644
--- a/include/xen/page.h
+++ b/include/xen/page.h
@@ -5,4 +5,6 @@
extern phys_addr_t xen_extra_mem_start, xen_extra_mem_size;
+extern unsigned long xen_released_pages;
+
#endif /* _XEN_PAGE_H */