diff -r f071be18e85f linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Fri Oct 6 16:51:10 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Sun Oct 8 04:57:23 2006 +0200 @@ -462,6 +462,7 @@ static int __init balloon_init(void) { unsigned long pfn; struct page *page; + unsigned long page_start; if (!is_running_on_xen()) return -ENODEV; @@ -489,9 +490,12 @@ static int __init balloon_init(void) balloon_pde->read_proc = balloon_read; balloon_pde->write_proc = balloon_write; #endif - + page_start = xen_start_info->nr_pages; + if (xen_feature(XENFEAT_auto_translated_physmap)) + page_start += NR_GRANT_FRAMES; + /* Initialise the balloon with excess memory space. */ - for (pfn = xen_start_info->nr_pages; pfn < max_pfn; pfn++) { + for (pfn = page_start; pfn < max_pfn; pfn++) { page = pfn_to_page(pfn); if (!PageReserved(page)) balloon_append(page);