Skip to content

Commit

Permalink
xen: prevent crashes with non-HIGHMEM 32-bit kernels with largeish me…
Browse files Browse the repository at this point in the history
…mory

If this is a non-HIGHMEM 32-bit kernel, then the page structures only go
up to the limit of addressable memory, even if more memory is physically
present.  Don't try to add that extra memory to the balloon.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
  • Loading branch information
Jeremy Fitzhardinge committed Dec 2, 2010
1 parent bc15fde commit 2a4c92f
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions drivers/xen/balloon.c
Original file line number Diff line number Diff line change
Expand Up @@ -412,8 +412,16 @@ 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(),
/*
* Initialise the balloon with excess memory space. We need
* to make sure we don't add memory which doesn't exist or
* logically exist. The E820 map can be trimmed to be smaller
* than the amount of physical memory due to the mem= command
* line parameter. And if this is a 32-bit non-HIGHMEM kernel
* on a system with memory which requires highmem to access,
* don't try to use it.
*/
extra_pfn_end = min(min(max_pfn, 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 < extra_pfn_end;
Expand Down

0 comments on commit 2a4c92f

Please sign in to comment.