aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/balloon.c
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-09-14 13:32:32 -0400
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-11-20 01:18:26 -0500
commit66946f676776a6ef333db1cf7453ecf8a66c90df (patch)
tree9eefb0b95ae97cef89bec299fb0ecc1f3d9e6103 /drivers/xen/balloon.c
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>
Diffstat (limited to 'drivers/xen/balloon.c')
-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 @@
50#include <asm/pgtable.h> 50#include <asm/pgtable.h>
51#include <asm/uaccess.h> 51#include <asm/uaccess.h>
52#include <asm/tlb.h> 52#include <asm/tlb.h>
53#include <asm/e820.h>
53 54
54#include <asm/xen/hypervisor.h> 55#include <asm/xen/hypervisor.h>
55#include <asm/xen/hypercall.h> 56#include <asm/xen/hypercall.h>
@@ -391,7 +392,7 @@ static struct notifier_block xenstore_notifier;
391 392
392static int __init balloon_init(void) 393static int __init balloon_init(void)
393{ 394{
394 unsigned long pfn; 395 unsigned long pfn, extra_pfn_end;
395 struct page *page; 396 struct page *page;
396 397
397 if (!xen_pv_domain()) 398 if (!xen_pv_domain())
@@ -412,8 +413,10 @@ static int __init balloon_init(void)
412 register_balloon(&balloon_sysdev); 413 register_balloon(&balloon_sysdev);
413 414
414 /* Initialise the balloon with excess memory space. */ 415 /* Initialise the balloon with excess memory space. */
416 extra_pfn_end = min(e820_end_of_ram_pfn(),
417 (unsigned long)PFN_DOWN(xen_extra_mem_start + xen_extra_mem_size));
415 for (pfn = PFN_UP(xen_extra_mem_start); 418 for (pfn = PFN_UP(xen_extra_mem_start);
416 pfn < PFN_DOWN(xen_extra_mem_start + xen_extra_mem_size); 419 pfn < extra_pfn_end;
417 pfn++) { 420 pfn++) {
418 page = pfn_to_page(pfn); 421 page = pfn_to_page(pfn);
419 /* totalram_pages doesn't include the boot-time 422 /* totalram_pages doesn't include the boot-time