From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: Re: [PATCH] xen/balloon: Subtract from xen_released_pages the count that is populated. Date: Tue, 29 May 2012 18:36:24 +0100 Message-ID: <4FC50918.4000608@citrix.com> References: <1338310689-5967-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1338310689-5967-1-git-send-email-konrad.wilk@oracle.com> Sender: linux-kernel-owner@vger.kernel.org To: Konrad Rzeszutek Wilk Cc: "xen-devel@lists.xensource.com" , "linux-kernel@vger.kernel.org" List-Id: xen-devel@lists.xenproject.org On 29/05/12 17:58, Konrad Rzeszutek Wilk wrote: > We did not take into account that xen_released_pages would be > used outside the initial E820 parsing code. As such we would > not subtract from xen_released_pages the count of pages > that we had populated back. Instead we just did a simple > extra_pages = released - populated calculation. > > However the balloon worker uses xen_released_pages to figure > out how many more pages it can balloon up to and not having > the proper numbers we would balloon more than we should have. I would probably rephrase this paragraph to be a bit clearer but it's not a big deal. Something like this perhaps: "The balloon driver uses xen_released_pages to set the initial current_pages count. If this is wrong (too low) then when a new (higher) target is set, the balloon driver will request too many pages from Xen." > This fixes errors such as: > > (XEN) memory.c:133:d0 Could not allocate order=0 extent: id=0 memflags=0 (51 of 512) > during bootup and > free_memory : 0 > > where the free_memory should be 128. > > Signed-off-by: Konrad Rzeszutek Wilk Acked-by: David Vrabel > --- > arch/x86/xen/setup.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c > index 3ebba07..a4790bf 100644 > --- a/arch/x86/xen/setup.c > +++ b/arch/x86/xen/setup.c > @@ -371,7 +371,8 @@ char * __init xen_memory_setup(void) > populated = xen_populate_chunk(map, memmap.nr_entries, > max_pfn, &last_pfn, xen_released_pages); > > - extra_pages += (xen_released_pages - populated); > + xen_released_pages -= populated; > + extra_pages += xen_released_pages; > > if (last_pfn > max_pfn) { > max_pfn = min(MAX_DOMAIN_PAGES, last_pfn);