# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Node ID b5117df9f8edf6eca8ff7dc8be7e7458817707c8 # Parent 9a39580dffc0a5f92d18bcd2098b786118ed6a71 xenLinux/ia64 doesn't use init_mm for ballooned area so that apply_to_page_range() isn't needed, only XENMEM_decrease_reservation is needed. PATCHNAME: balloon_driver_ia64 Signed-off-by: Isaku Yamahata diff -r 9a39580dffc0 -r b5117df9f8ed linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Fri Apr 28 15:20:20 2006 +0900 +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c Fri Apr 28 15:20:25 2006 +0900 @@ -517,6 +517,23 @@ void balloon_update_driver_allowance(lon balloon_unlock(flags); } +#ifdef __ia64__ +static int +balloon_dealloc_range(unsigned long vstart, unsigned int order) +{ + int ret; + unsigned long gmfn = __pa(vstart) >> PAGE_SHIFT; + struct xen_memory_reservation reservation = { + .extent_start = &gmfn, + .nr_extents = 1, + .extent_order = order, + .domid = DOMID_SELF + }; + ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation); + BUG_ON(ret != 1); + return 0; +} +#else static int dealloc_pte_fn( pte_t *pte, struct page *pmd_page, unsigned long addr, void *data) { @@ -535,6 +552,14 @@ static int dealloc_pte_fn( return 0; } +static int +balloon_dealloc_range(unsigned long vstart, unsigned int order) +{ + return apply_to_page_range(&init_mm, vstart, + PAGE_SIZE << order, dealloc_pte_fn, NULL); +} +#endif + struct page *balloon_alloc_empty_page_range(unsigned long nr_pages) { unsigned long vstart, flags; @@ -548,8 +573,7 @@ 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); + ret = balloon_dealloc_range(vstart, order); BUG_ON(ret); current_pages -= 1UL << order; totalram_pages = current_pages;