All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: stefano.stabellini@eu.citrix.com, tim@xen.org, xen-devel@lists.xen.org
Subject: Re: [PATCH v3 8/8] xen: arm: allocate more than one bank for 1:1 domain 0 if needed
Date: Fri, 27 Jun 2014 13:52:52 +0100	[thread overview]
Message-ID: <53AD6924.7070102@linaro.org> (raw)
In-Reply-To: <1403861047.32314.15.camel@kazak.uk.xensource.com>



On 27/06/14 10:24, Ian Campbell wrote:
> On Thu, 2014-06-26 at 19:20 +0100, Julien Grall wrote:
>> On 06/26/2014 11:17 AM, Ian Campbell wrote:
>>> Depending on where Xen and the initial modules were loaded into RAM we may not
>>> be able to allocate a suitably contiguous block of memory for dom0. Especially
>>> since the allocations made by alloc_domheap_pages are naturally aligned (e.g. a
>>> 1GB allocation must be at a 1GB boundary).
>>>
>>> The alignment requirement in particular is a huge limitation, meaning that even
>>> dom0_mem0=1G on a 2GB system is pretty likely to fail unless you are very
>>> careful with your load addresses. People were also having trouble with dom0 >
>>> 128MB on the 1GB cubieboard2 when using fairly standard load addresses for
>>> things.
>>>
>>> This patch tries to allocate multiple banks of memory in order to try and
>>> satisfy the entire requested domain 0 allocation. Sadly this turns out to be
>>> pretty tricky to arrange (see the large comment in the code).
>>>
>>> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
>>> Cc: Karim Raslan <karim.allah.ahmed@gmail.com>
>>> ---
>>> v3:
>>>    Handle running out of banks more gracefully
>>>    Allow order >= min_low_order, not strictly greater. Otherwise
>>>    dom0_mem=128M doesn't work.
>>
>> dom0_mem still not working on the versatile express (see my explanation
>> a below).
>
>>
>>> +static void allocate_memory_11(struct domain *d, struct kernel_info *kinfo)
>>> +{
>>> +    const unsigned int min_low_order =
>>> +        get_order_from_bytes(min_t(paddr_t, dom0_mem, MB(128)));
>>> +    const unsigned int min_order = get_order_from_bytes(MB(4));
>>> +    struct page_info *pg;
>>> +    unsigned int order = get_11_allocation_size(kinfo->unassigned_mem);
>>> +    int i;
>>> +
>>> +    bool_t lowmem = is_32bit_domain(d);
>>> +    unsigned int bits;
>>> +
>>> +    printk("Allocating 1:1 mappings totalling %ldMB for dom0:\n",
>>> +           /* Don't want format this as PRIpaddr (16 digit hex) */
>>> +           (unsigned long)(kinfo->unassigned_mem >> 20));
>>> +
>>> +    kinfo->mem.nr_banks = 0;
>>> +
>>> +    /*
>>> +     * First try and allocate the largest thing we can as low as
>>> +     * possible to be bank 0.
>>> +     */
>>> +    while ( order >= min_low_order )
>>> +    {
>>> +        for ( bits = order ; bits < (lowmem ? 32 : PADDR_BITS); bits++ )
>>
>> This has to be: bits <= (...). Indeed, we want to try all possible zone.

After digging into the code, I confirm that we need the "<=".

the zone is retrieved with this formula: fls(page_to_mfn(pg)), in the 
case of the versatile express the bank start mfn is 0x8000.
So every page will reach the zone 20. At the same time zone 20 is equals 
to bits=32.

Futhermore, it looks like we always allocate memory from the top of this 
zone. Is it normal?

Regards,

-- 
Julien Grall

  parent reply	other threads:[~2014-06-27 12:52 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-26 10:16 [PATCH v3 0/8] xen: arm: Use super pages in p2m Ian Campbell
2014-06-26 10:17 ` [PATCH v3 1/8] xen: arm: dump vcpu gic info in arch_dump_vcpu_info Ian Campbell
2014-06-26 10:17 ` [PATCH v3 2/8] tools/libxc: pull min/max_t into xc_private.h Ian Campbell
2014-06-26 10:34   ` Ian Jackson
2014-06-26 10:17 ` [PATCH v3 3/8] tools: arm: allocate large pages to guests Ian Campbell
2014-06-26 10:17 ` [PATCH v3 4/8] xen: arm: only put_page for p2m operations which require it Ian Campbell
2014-06-26 10:17 ` [PATCH v3 5/8] xen: arm: handle superpage mappings in p2m_lookup Ian Campbell
2014-06-26 10:17 ` [PATCH v3 6/8] xen: arm: add some helpers for assessing p2m pte Ian Campbell
2014-06-26 15:07   ` Julien Grall
2014-06-26 10:17 ` [PATCH v3 7/8] xen: arm: use superpages in p2m when pages are suitably aligned Ian Campbell
2014-06-26 15:16   ` Julien Grall
2014-06-26 10:17 ` [PATCH v3 8/8] xen: arm: allocate more than one bank for 1:1 domain 0 if needed Ian Campbell
2014-06-26 18:20   ` Julien Grall
2014-06-27  9:24     ` Ian Campbell
2014-06-27 10:31       ` Julien Grall
2014-06-27 11:54         ` Julien Grall
2014-06-27 12:52       ` Julien Grall [this message]
2014-06-27 13:01         ` Ian Campbell
2014-06-27 13:04           ` Julien Grall
2014-06-27 13:09             ` Ian Campbell
2014-06-30 15:58               ` Ian Campbell
2014-06-30 16:10                 ` Julien Grall
2014-06-30 16:14                   ` Ian Campbell
2014-06-30 16:20                     ` Julien Grall
2014-06-30 16:27                       ` Ian Campbell
2014-06-30 16:29                         ` Julien Grall
2014-06-30 16:31                           ` Ian Campbell
2014-06-26 15:03 ` [PATCH v3 0/8] xen: arm: Use super pages in p2m Julien Grall
2014-06-30 15:44   ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53AD6924.7070102@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=Ian.Campbell@citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.