[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 2/5] xen/balloon: account for pages released during memory setup

In xen_memory_setup() pages that occur in gaps in the memory map are
released back to Xen.  This reduces the domain's current page count.
The Xen balloon driver does not correctly decrease its initial
current_pages count to reflect this.  If 'delta' pages are released
and the target is adjusted the resulting reservation is always 'delta'
less than the requested target.

This affects dom0 if the initial allocation of pages overlaps the PCI
memory region but won't affect most domU guests that have been setup
with pseudo-physical memory maps that don't have gaps.

Fix this by asking the hypervisor what the current reservation is when
starting the balloon driver.

If the domain's targets are managed by xapi, the domain may eventually
run out of memory and die because xapi currently gets its target
calculations wrong and whenever it is restarted it always reduces the
target by 'delta'.

Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
 drivers/xen/balloon.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 5dfd8f8..5814022 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -557,15 +557,20 @@ EXPORT_SYMBOL(free_xenballooned_pages);
 static int __init balloon_init(void)
+       domid_t domid = DOMID_SELF;
        unsigned long pfn, extra_pfn_end;
        struct page *page;
+       int ret;
        if (!xen_domain())
                return -ENODEV;
        pr_info("xen/balloon: Initialising balloon driver.\n");
-       balloon_stats.current_pages = xen_pv_domain() ? 
min(xen_start_info->nr_pages, max_pfn) : max_pfn;
+       ret = HYPERVISOR_memory_op(XENMEM_current_reservation, &domid);
+       if (ret < 0)
+               return ret;
+       balloon_stats.current_pages = ret;
        balloon_stats.target_pages  = balloon_stats.current_pages;
        balloon_stats.balloon_low   = 0;
        balloon_stats.balloon_high  = 0;

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.