From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH 2/5] xen/balloon: account for pages released during memory setup Date: Tue, 6 Sep 2011 17:31:39 -0400 Message-ID: <20110906213139.GB24860@dumpdata.com> References: <1313765840-22084-1-git-send-email-david.vrabel@citrix.com> <1313765840-22084-3-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <1313765840-22084-3-git-send-email-david.vrabel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: David Vrabel Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org 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 > --- > 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