summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-09-14 10:32:32 -0700
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-11-19 22:18:26 -0800
commit66946f676776a6ef333db1cf7453ecf8a66c90df (patch)
tree9eefb0b95ae97cef89bec299fb0ecc1f3d9e6103
parent2f70e0acd496398671606767122846278126a88b (diff)
xen/balloon: make sure we only include remaining extra ram
If the user specifies mem= on the kernel command line, some or all of the extra memory E820 region may be clipped away, so make sure we don't try to add more extra memory than exists in E820. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
-rw-r--r--drivers/xen/balloon.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 77b5dc3597e3..2b17ad5b4b32 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -50,6 +50,7 @@
#include <asm/pgtable.h>
#include <asm/uaccess.h>
#include <asm/tlb.h>
+#include <asm/e820.h>
#include <asm/xen/hypervisor.h>
#include <asm/xen/hypercall.h>
@@ -391,7 +392,7 @@ static struct notifier_block xenstore_notifier;
static int __init balloon_init(void)
{
- unsigned long pfn;
+ unsigned long pfn, extra_pfn_end;
struct page *page;
if (!xen_pv_domain())
@@ -412,8 +413,10 @@ static int __init balloon_init(void)
register_balloon(&balloon_sysdev);
/* Initialise the balloon with excess memory space. */
+ extra_pfn_end = min(e820_end_of_ram_pfn(),
+ (unsigned long)PFN_DOWN(xen_extra_mem_start + xen_extra_mem_size));
for (pfn = PFN_UP(xen_extra_mem_start);
- pfn < PFN_DOWN(xen_extra_mem_start + xen_extra_mem_size);
+ pfn < extra_pfn_end;
pfn++) {
page = pfn_to_page(pfn);
/* totalram_pages doesn't include the boot-time