[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH 2/5] xen/balloon: account for pages released during memory setup
On Fri, Aug 19, 2011 at 03:57:17PM +0100, David Vrabel wrote: > 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. You might want to add: "in the hypervisor." > 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. Might want to add: Wherein delta is reported as (for example): [ 0.000000] released 261886 pages of unused memory > > 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; long int? > > 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; > -- > 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |