From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeremy Fitzhardinge Subject: Re: [PATCH] Balloon driver crash Date: Tue, 08 Jun 2010 11:34:42 -0700 Message-ID: <4C0E8D42.1010706@goop.org> References: <1275597402.2782.47.camel@localhost.localdomain> <201006031738.15635.dcm@mccr.org> <1275983765.24218.49851.camel@zakaz.uk.xensource.com> <1275986577.24218.49951.camel@zakaz.uk.xensource.com> <4C0E731E.8060308@goop.org> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: M A Young Cc: "xen-devel@lists.xensource.com" , Dave McCracken , Ian Campbell List-Id: xen-devel@lists.xenproject.org On 06/08/2010 11:08 AM, M A Young wrote: > On Tue, 8 Jun 2010, Jeremy Fitzhardinge wrote: > >> On 06/08/2010 02:25 AM, M A Young wrote: >>> This patch fixes an error in commit >>> f4685d0ed041523d1bd5124c5872459681aca876 >>> "Add hugepage support to balloon driver" that was causing the balloon >>> driver to crash when shrinking the memory used by Domain-0. >> >> Thanks. But why haven't I seen this? > > Good question, but I think you only see the crash in a limited memory > situation. I don't claim to be an expert in what is going on, but a > few lines earlier you have the the loop > > for (i = 0; i < nr_pages; i++) { > if ((page = alloc_pages(GFP_BALLOON, balloon_order)) > == NULL) { > nr_pages = i; > need_sleep = 1; > break; > } > > pfn = page_to_pfn(page); > frame_list[i] = pfn_to_mfn(pfn); > > scrub_page(page); > } > > If alloc_pages(GFP_BALLOON, balloon_order) is never NULL during the > loop then page is left set to be one of the pages you are freeing. > From then on PageHighMem(pfn_to_page(lpfn)) and PageHighMem(page) > could easily the same and you will only have a problem if some of the > pages you are freeing are PageHighMem and some aren't. > > If alloc_pages(GFP_BALLOON, balloon_order) is null somewhere in the > loop (presumably because it can't find enough pages to free) then the > process will crash. I think the short answer is that I always run 64-bit dom0, so there's no highmem... J