All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Peng Fan <van.freenix@gmail.com>, sstabellini@kernel.org
Cc: Peng Fan <peng.fan@nxp.com>, xen-devel@lists.xen.org
Subject: Re: [RFC] xen/arm: domain_build: introduce dom0_lowmem bootargs
Date: Tue, 13 Sep 2016 13:59:01 +0100	[thread overview]
Message-ID: <97c00e3f-5cfa-438b-7979-a780abc8e295@arm.com> (raw)
In-Reply-To: <1473771325-13232-1-git-send-email-peng.fan@nxp.com>

Hello Peng,

On 13/09/16 13:55, Peng Fan wrote:
> On AArch64 SoCs, some IPs may only have the capability to access
> 32bits address space. The physical memory assigned for Dom0 maybe
> not in 4GB address space, then the IPs will not work properly.
>
> Introduce dom0_lowmem bootargs, user could pass "dom0_lowmem=xx"
> to xen. It means how much memory user would like to be allocated
> in lower 4GB memory space. If there is not enough memory for
> dom0_lowmem, higher memory will be allocated.
>
> Thinking such a memory layout on an AArch64 SoC:
> Region 0: 2GB(0x80000000 - 0xffffffff)
> Region 1: 4GB(0x880000000 - 0x97fffffff)
> If user would like to assign 2GB for Dom0 and 1GB of the 2GB memory
> in Region 0, user could pass "dom0=2048M dom0_lowmem=1024M" to xen.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Julien Grall <julien.grall@arm.com>
> ---
>
> This patch is to resolve the issue mentioned in
> https://lists.xen.org/archives/html/xen-devel/2016-09/msg00235.html
> This patch not tested on latest 4.8-unstable, I only tested similar
> patch on xen 4.7 on AArch64 platform.

Please test any patch send upstream on 4.8-unstable. The code may have 
changed.

>
> The idea of patch is that user could specify the lowmem that user would
> like to use. I rethought the ideas in https://lists.xen.org/archives/html/xen-devel/2016-09/msg00487.html,
> but that is not good. lowmem is precise, it maybe used for some IPs that maybe
> passthrough to DomU, so we only allocate the needed memory for Dom0.

Why? IPs passthrough to DomU will have to be protected by an SMMU so it 
does not matter whether Dom0 is using all the lowmem or not.

Regards,

>
>  xen/arch/arm/domain_build.c | 30 +++++++++++++++++++++++++++++-
>  1 file changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 35ab08d..0f53bba 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -33,6 +33,8 @@ int dom0_11_mapping = 1;
>
>  #define DOM0_MEM_DEFAULT 0x8000000 /* 128 MiB */
>  static u64 __initdata dom0_mem = DOM0_MEM_DEFAULT;
> +/* Only for AArch64 */
> +static u64 __initdata dom0_lowmem;
>
>  static void __init parse_dom0_mem(const char *s)
>  {
> @@ -42,6 +44,12 @@ static void __init parse_dom0_mem(const char *s)
>  }
>  custom_param("dom0_mem", parse_dom0_mem);
>
> +static void __init parse_dom0_lowmem(const char *s)
> +{
> +    dom0_lowmem = parse_size_and_unit(s, &s);
> +}
> +custom_param("dom0_lowmem", parse_dom0_lowmem);
> +
>  //#define DEBUG_11_ALLOCATION
>  #ifdef DEBUG_11_ALLOCATION
>  # define D11PRINT(fmt, args...) printk(XENLOG_DEBUG fmt, ##args)
> @@ -244,7 +252,7 @@ static void allocate_memory(struct domain *d, struct kernel_info *kinfo)
>      unsigned int order = get_11_allocation_size(kinfo->unassigned_mem);
>      int i;
>
> -    bool_t lowmem = is_32bit_domain(d);
> +    bool_t lowmem = is_32bit_domain(d) || !!dom0_lowmem;
>      unsigned int bits;
>
>      /*
> @@ -263,6 +271,9 @@ static void allocate_memory(struct domain *d, struct kernel_info *kinfo)
>       * First try and allocate the largest thing we can as low as
>       * possible to be bank 0.
>       */
> +    if ( dom0_lowmem )
> +        order = get_order_from_bytes(dom0_lowmem);
> +
>      while ( order >= min_low_order )
>      {
>          for ( bits = order ; bits <= (lowmem ? 32 : PADDR_BITS); bits++ )
> @@ -278,6 +289,11 @@ static void allocate_memory(struct domain *d, struct kernel_info *kinfo)
>
>   got_bank0:
>
> +    if ( dom0_lowmem ) {
> +        dom0_lowmem -= pfn_to_paddr((1 << order));
> +        lowmem = is_32bit_domain(d) || !!dom0_lowmem;
> +    }
> +
>      if ( !insert_11_bank(d, kinfo, pg, order) )
>          BUG(); /* Cannot fail for first bank */
>
> @@ -325,6 +341,16 @@ static void allocate_memory(struct domain *d, struct kernel_info *kinfo)
>              }
>          }
>
> +        if ( dom0_lowmem && lowmem )
> +        {
> +            dom0_lowmem -= pfn_to_paddr((1 << order));
> +            lowmem = is_32bit_domain(d) || !!dom0_lowmem;
> +        }
> +	else
> +        {
> +            lowmem = false;
> +        }
> +
>          /*
>           * Success, next time around try again to get the largest order
>           * allocation possible.
> @@ -2098,6 +2124,8 @@ int construct_dom0(struct domain *d)
>
>      d->max_pages = ~0U;
>
> +    BUG_ON(dom0_mem < dom0_lowmem);
> +
>      kinfo.unassigned_mem = dom0_mem;
>
>      rc = kernel_probe(&kinfo);
>

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2016-09-13 12:59 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-13 12:55 [RFC] xen/arm: domain_build: introduce dom0_lowmem bootargs Peng Fan
2016-09-13 12:59 ` Julien Grall [this message]
2016-09-13 13:12   ` Peng Fan
2016-09-13 13:24     ` Julien Grall
2016-09-14  1:31       ` Peng Fan
2016-09-14  7:16         ` 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=97c00e3f-5cfa-438b-7979-a780abc8e295@arm.com \
    --to=julien.grall@arm.com \
    --cc=peng.fan@nxp.com \
    --cc=sstabellini@kernel.org \
    --cc=van.freenix@gmail.com \
    --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.