# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Node ID 6c2ab5cfca56255320c82a36ebc35ad31d3951d5 # Parent 4f7ee25edd8141b6fa44f385d10cef62e18a2bb9 balloon driver: when autotranslate mode, pages are returned to xen without traverseing init_mm This change is needed for xen/ia64 vp model. Signed-off-by: Isaku Yamahata diff -r 4f7ee25edd81 -r 6c2ab5cfca56 linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Sat Apr 29 13:17:03 2006 +0900 +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Sat Apr 29 13:19:39 2006 +0900 @@ -548,9 +548,22 @@ struct page *balloon_alloc_empty_page_ra scrub_pages(vstart, 1 << order); balloon_lock(flags); - ret = apply_to_page_range(&init_mm, vstart, - PAGE_SIZE << order, dealloc_pte_fn, NULL); - BUG_ON(ret); + if (xen_feature(XENFEAT_auto_translated_physmap)) { + unsigned long gmfn = __pa(vstart) >> PAGE_SHIFT; + struct xen_memory_reservation reservation = { + .nr_extents = 1, + .extent_order = order, + .domid = DOMID_SELF + }; + set_xen_guest_handle(reservation.extent_start, &gmfn); + ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, + &reservation); + BUG_ON(ret != 1); + } else { + ret = apply_to_page_range(&init_mm, vstart, PAGE_SIZE << order, + dealloc_pte_fn, NULL); + BUG_ON(ret); + } current_pages -= 1UL << order; totalram_pages = current_pages; balloon_unlock(flags);