xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Campbell <ian.campbell@citrix.com>
To: xen-devel@lists.xen.org
Cc: julien.grall@linaro.org, tim@xen.org,
	Ian Campbell <ian.campbell@citrix.com>,
	stefano.stabellini@eu.citrix.com
Subject: [PATCH 3/3] xen: arm: rework dom0 initrd and dtb placement
Date: Wed, 9 Apr 2014 12:51:16 +0100	[thread overview]
Message-ID: <1397044276-30185-3-git-send-email-ian.campbell@citrix.com> (raw)
In-Reply-To: <1397044259.6275.15.camel@kazak.uk.xensource.com>

This now uses the same decision tree as libxc (which is much easier to test).

The main change is to explictly handle the placement at 128MB or end of RAM as
two cases, rather than combining with MIN. The effect is the same but the code
is clearer.

Secondly the attempt to place the mopules right after the kernel is removed,
since it is redundant with the case where placing them at the end of RAM ends
up abutting the kernel.

Also round the kernel size up to a 2MB boundary.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
I'm sure to regret playing with this yet again...
---
 xen/arch/arm/kernel.c |   22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c
index bc625a4..1102392 100644
--- a/xen/arch/arm/kernel.c
+++ b/xen/arch/arm/kernel.c
@@ -77,7 +77,7 @@ static void place_modules(struct kernel_info *info,
     const paddr_t rambase = info->mem.bank[0].start;
     const paddr_t ramsize = info->mem.bank[0].size;
     const paddr_t ramend = rambase + ramsize;
-    const paddr_t kernsize = kernend - kernbase;
+    const paddr_t kernsize = ROUNDUP(kernend, MB(2)) - kernbase;
     const paddr_t ram128mb = rambase + MB(128);
 
     paddr_t modbase;
@@ -95,16 +95,18 @@ static void place_modules(struct kernel_info *info,
      * If the bootloader provides an initrd, it will be loaded just
      * after the DTB.
      *
-     * We try to place dtb+initrd at 128MB, (or, if we have less RAM,
-     * as high as possible). If there is no space then fallback to
-     * just after the kernel, if there is room, otherwise just before.
+     * We try to place dtb+initrd at 128MB or if we have less RAM
+     * as high as possible. If there is no space then fallback to
+     * just before the kernel.
+     *
+     * If changing this then consider
+     * tools/libxc/xc_dom_arm.c:arch_setup_meminit as well.
      */
-
-    if ( kernend < MIN(ram128mb, ramend - modsize) )
-        modbase = MIN(ram128mb, ramend - modsize);
-    else if ( ramend - ROUNDUP(kernend, MB(2)) >= modsize )
-        modbase = ROUNDUP(kernend, MB(2));
-    else if ( kernbase - rambase >= modsize )
+    if ( ramend >= ram128mb + modsize && kernend < ram128mb )
+        modbase = ram128mb;
+    else if ( ramend - modsize > ROUNDUP(kernend, MB(2)) )
+        modbase = ramend - modsize;
+    else if ( kernbase - rambase > modsize )
         modbase = kernbase - modsize;
     else
     {
-- 
1.7.10.4

  parent reply	other threads:[~2014-04-09 11:51 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-09 11:50 [PATCH 0/3] xen: arm: fixes for initrd and dtb placement Ian Campbell
2014-04-09 11:51 ` [PATCH 1/3] tools: arm: improve placement of initial modules Ian Campbell
2014-04-09 12:43   ` Julien Grall
2014-04-09 12:46     ` Ian Campbell
2014-04-10 11:38     ` Ian Campbell
2014-04-10 11:39       ` Ian Jackson
2014-05-22 16:07         ` Ian Jackson
2014-04-09 11:51 ` [PATCH 2/3] xen: arm: use same variables as userspace in dom0 builder place_modules() Ian Campbell
2014-04-09 12:45   ` Julien Grall
2014-04-09 12:52     ` Ian Campbell
2014-04-09 13:37       ` Julien Grall
2014-04-09 11:51 ` Ian Campbell [this message]
2014-04-09 12:54   ` [PATCH 3/3] xen: arm: rework dom0 initrd and dtb placement Julien Grall
2014-04-09 12:57     ` Ian Campbell
2014-04-09 13:09       ` Julien Grall
2014-04-09 13:15         ` Ian Campbell
2014-04-09 13:24           ` Julien Grall
2014-04-09 13:28             ` Ian Campbell
2014-04-09 13:35               ` Julien Grall

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=1397044276-30185-3-git-send-email-ian.campbell@citrix.com \
    --to=ian.campbell@citrix.com \
    --cc=julien.grall@linaro.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).