diff options
Diffstat (limited to 'drivers/xen/balloon.c')
-rw-r--r-- | drivers/xen/balloon.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index 8c81cd24ed8..043af8ad6b6 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c | |||
@@ -246,7 +246,7 @@ static enum bp_state increase_reservation(unsigned long nr_pages) | |||
246 | set_phys_to_machine(pfn, frame_list[i]); | 246 | set_phys_to_machine(pfn, frame_list[i]); |
247 | 247 | ||
248 | /* Link back into the page tables if not highmem. */ | 248 | /* Link back into the page tables if not highmem. */ |
249 | if (pfn < max_low_pfn) { | 249 | if (!xen_hvm_domain() && pfn < max_low_pfn) { |
250 | int ret; | 250 | int ret; |
251 | ret = HYPERVISOR_update_va_mapping( | 251 | ret = HYPERVISOR_update_va_mapping( |
252 | (unsigned long)__va(pfn << PAGE_SHIFT), | 252 | (unsigned long)__va(pfn << PAGE_SHIFT), |
@@ -293,7 +293,7 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp) | |||
293 | 293 | ||
294 | scrub_page(page); | 294 | scrub_page(page); |
295 | 295 | ||
296 | if (!PageHighMem(page)) { | 296 | if (!xen_hvm_domain() && !PageHighMem(page)) { |
297 | ret = HYPERVISOR_update_va_mapping( | 297 | ret = HYPERVISOR_update_va_mapping( |
298 | (unsigned long)__va(pfn << PAGE_SHIFT), | 298 | (unsigned long)__va(pfn << PAGE_SHIFT), |
299 | __pte_ma(0), 0); | 299 | __pte_ma(0), 0); |
@@ -309,7 +309,7 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp) | |||
309 | /* No more mappings: invalidate P2M and add to balloon. */ | 309 | /* No more mappings: invalidate P2M and add to balloon. */ |
310 | for (i = 0; i < nr_pages; i++) { | 310 | for (i = 0; i < nr_pages; i++) { |
311 | pfn = mfn_to_pfn(frame_list[i]); | 311 | pfn = mfn_to_pfn(frame_list[i]); |
312 | set_phys_to_machine(pfn, INVALID_P2M_ENTRY); | 312 | __set_phys_to_machine(pfn, INVALID_P2M_ENTRY); |
313 | balloon_append(pfn_to_page(pfn)); | 313 | balloon_append(pfn_to_page(pfn)); |
314 | } | 314 | } |
315 | 315 | ||
@@ -429,15 +429,19 @@ EXPORT_SYMBOL(free_xenballooned_pages); | |||
429 | 429 | ||
430 | static int __init balloon_init(void) | 430 | static int __init balloon_init(void) |
431 | { | 431 | { |
432 | unsigned long pfn, extra_pfn_end; | 432 | unsigned long pfn, nr_pages, extra_pfn_end; |
433 | struct page *page; | 433 | struct page *page; |
434 | 434 | ||
435 | if (!xen_pv_domain()) | 435 | if (!xen_domain()) |
436 | return -ENODEV; | 436 | return -ENODEV; |
437 | 437 | ||
438 | pr_info("xen/balloon: Initialising balloon driver.\n"); | 438 | pr_info("xen/balloon: Initialising balloon driver.\n"); |
439 | 439 | ||
440 | balloon_stats.current_pages = min(xen_start_info->nr_pages, max_pfn); | 440 | if (xen_pv_domain()) |
441 | nr_pages = xen_start_info->nr_pages; | ||
442 | else | ||
443 | nr_pages = max_pfn; | ||
444 | balloon_stats.current_pages = min(nr_pages, max_pfn); | ||
441 | balloon_stats.target_pages = balloon_stats.current_pages; | 445 | balloon_stats.target_pages = balloon_stats.current_pages; |
442 | balloon_stats.balloon_low = 0; | 446 | balloon_stats.balloon_low = 0; |
443 | balloon_stats.balloon_high = 0; | 447 | balloon_stats.balloon_high = 0; |