From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH] xen/arm: Workaround for memory problem >1gb Date: Thu, 2 Oct 2014 15:09:39 +0100 Message-ID: <1412258979.17146.14.camel@citrix.com> References: <542D3108.4080506@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <542D3108.4080506@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Julien Grall Cc: Tim Deegan , Stefano Stabellini , Frediano Ziglio , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On Thu, 2014-10-02 at 12:03 +0100, Julien Grall wrote: > Hello Frediano, > > On 10/01/2014 03:27 PM, Frediano Ziglio wrote: > > setup_xenheap_mappings setup head memory on Arm 32 has a limit of 1gb. > > On system with large memory is possible that there are no blocks of memory > > smaller than 1gb leading xenheap_pages to be more than 1gb. > > This cause memory errors trying to access heap after the 1gb limit. > > > > Signed-off-by: Frediano Ziglio > > --- > > xen/arch/arm/setup.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > > index 446de8a..b1a43e6 100644 > > --- a/xen/arch/arm/setup.c > > +++ b/xen/arch/arm/setup.c > > @@ -524,6 +524,9 @@ static void __init setup_mm(unsigned long > > dtb_paddr, size_t dtb_size) > > if ( ! e ) > > panic("Not not enough space for xenheap"); > > > > + if ( xenheap_pages > 1<<(30-PAGE_SHIFT) ) > > + xenheap_pages = 1<<(30-PAGE_SHIFT); > > + > > Looking closer to the code, can't we add a new constraint before the > loop when we are looking for the maximum heap size? > > smth like: > > xenheap_pages = (heap_pages/8 + ...) > xenheap_pages = max(xenheap_pages, 128UL<<(20 - PAGE_SHIFT) > xenheap_pages = max(xenheap_pages, 1UL<<(30-PAGE_SHIFT)) I think that would work, and it would have the additional benefit that for some memory layouts it might cause us to place the xenheap in a higher block of memory than we would otherwise, which is generally desirable. Ian.