[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] xen/arm: Sanity test specified domain's memory for being a multiple of a page size


  • To: "Michal Orzel" <michal.orzel@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: "Alejandro Vallejo" <alejandro.garciavallejo@xxxxxxx>
  • Date: Wed, 07 Oct 2026 15:40:03 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Cz9WeqqwdBHYfBplQ//PrsacBTML2jDjUyTygECUkQE=; b=bBAOaOOAa35wXqIsOgC/0+tSUol8E7dB7qjzO2oRkYaq2MlXgCbc3Ty3KpVkerlCLqeSm+m5oR2vbxS5kxuEXT8wfXQrN4zfGliZsuUG0XSsWRbwS+LUsbM2YdJAViWtzlgV5XFyPu4f36b+AqBexr91laaKw0k51UlaDN1btzlt08V4ufmI/5pwBzd4tRs1OirMbqiUYBjrFAV6PBOrPscG4QkBUBryLNuEzXOqypCvQgILUr8toK9RzIDaCQbRLde1vd/ShKuCC+9lrf15kNAFBsijT7T9ckQiiyCWcU8Hy1w3Q9tRTwtC6VLFKJjqIs/7Hu0nQIR6glLDSA+x6w==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RAbmGUgxHvgWE7ljK44jpU1qPoW7g98xJWud9MXDJwcGRgY3JKHzXJiKNyJgBs8F2HIC1Gvh7MinKCFWOijqHiTYHbFcoLEKVg/mhFsHiapt2zz8mI+fHJcKJ0S+CVvN4QdcxGnyAgON/hPlZi8l4VGNg0JCE9EL7XpIBLtCdf8WRSjn4nH/dBM8bCJPWn1l0yuXmKohaQdJQPc9WOhOGogW8svdcimIgqvIXzdLuvhRdFPUsqSo7aBqhfpNMks9QGO8jUQyT8qfUi/i3Wui2EyoItvR9v6R7eR7pWRpRPb1d+j6cKZiLoKLigsy3G9tePLPaHt7LBzcK9oHg49e/Q==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-Id:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com;
  • Cc: "Stefano Stabellini" <sstabellini@xxxxxxxxxx>, "Julien Grall" <julien@xxxxxxx>, "Bertrand Marquis" <bertrand.marquis@xxxxxxx>, "Volodymyr Babchuk" <Volodymyr_Babchuk@xxxxxxxx>, "Andrew Cooper" <andrew.cooper3@xxxxxxxxxx>, "Anthony PERARD" <anthony.perard@xxxxxxxxxx>, "Jan Beulich" <jbeulich@xxxxxxxx>, Roger Pau Monné <roger@xxxxxxxxxxxxxx>
  • Delivery-date: Wed, 07 Oct 2026 13:40:32 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed Oct 7, 2026 at 2:48 PM CEST, Michal Orzel wrote:
> We require memory to allocate for a domain as RAM to be a multiple of a
> page size. However, we neither document this nor sanity test. Specifying
> memory size that does not conform to this requirement fails the domain
> memory allocation in the non-obvious way that is difficult to parse for
> the user (printing over-allocation messages followed by the panic that Xen
> could not allocate the requested amount of memory).
>
> While there, fix indentation from tabs to spaces for "memory" parameter in
> booting.txt.
>
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
> ---
>  docs/misc/arm/device-tree/booting.txt   | 4 ++--
>  docs/misc/xen-command-line.pandoc       | 5 +++--
>  xen/arch/arm/domain_build.c             | 6 ++++++
>  xen/common/device-tree/dom0less-build.c | 7 +++++++
>  4 files changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/docs/misc/arm/device-tree/booting.txt 
> b/docs/misc/arm/device-tree/booting.txt
> index bcb06bc796bf..7dfac2062a37 100644
> --- a/docs/misc/arm/device-tree/booting.txt
> +++ b/docs/misc/arm/device-tree/booting.txt
> @@ -155,8 +155,8 @@ with the following properties:
>  
>  - memory
>  
> -     A 64-bit integer specifying the amount of kilobytes of RAM to
> -    allocate to the guest.
> +    A 64-bit integer specifying the amount of kilobytes of RAM to
> +    allocate to the guest. Must be a multiple of 4KB (the page size).

nit: s/KB/KiB

But page size isn't always 4KiB on all ports. PowerPC has 64KiB pages.
IMO, 4KB shouldn't be here or elsewhere in documentation.

>  
>  - cpus
>  
> diff --git a/docs/misc/xen-command-line.pandoc 
> b/docs/misc/xen-command-line.pandoc
> index ea0e3368b1d6..d49db353d8a8 100644
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -1020,8 +1020,9 @@ and architecture-specific domain limits.
>  > `= <size>`
>  
>  Set the amount of memory for the initial domain (dom0). It must be
> -greater than zero. This parameter is required (and only used) when the 
> initial
> -domain is not described in the Device-Tree.
> +greater than zero and a multiple of the page size (4KB). This parameter is
> +required (and only used) when the initial domain is not described in the
> +Device-Tree.

Same 4KB remark.

>  
>  ### dom0_mem (x86)
>  > `= List of ( min:<sz> | max:<sz> | <sz> )`
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 72d531618045..bc3d1ebad1c4 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -1881,6 +1881,12 @@ static int __init construct_dom0(struct domain *d)
>          warning_add("PLEASE SPECIFY dom0_mem PARAMETER - USING 512M FOR 
> NOW\n");
>          dom0_mem = MB(512);
>      }
> +    else if ( dom0_mem % PAGE_SIZE )
> +    {
> +        printk("%pd: specified dom0_mem (%"PRIu64"B) is not a multiple of a 
> page size\n",
> +               d, dom0_mem);
> +        return -EINVAL;
> +    }

nit: XENLOG_WARNING?

Also, is this is meant to be self-healing? If so the return should just be:

    dom0_mem = round_pgdown(dom0_mem);

and continue. And if it isn't meant to be self-healing, why not just panic()?

>  
>      d->max_pages = dom0_mem >> PAGE_SHIFT;
>  
> diff --git a/xen/common/device-tree/dom0less-build.c 
> b/xen/common/device-tree/dom0less-build.c
> index fcbeb8adbd73..b3f24e5d555f 100644
> --- a/xen/common/device-tree/dom0less-build.c
> +++ b/xen/common/device-tree/dom0less-build.c
> @@ -789,6 +789,13 @@ static int __init construct_domU(struct kernel_info 
> *kinfo,
>      }
>      kinfo->unassigned_mem = (paddr_t)mem * SZ_1K;
>  
> +    if ( kinfo->unassigned_mem % PAGE_SIZE )
> +    {
> +        printk("%pd: specified \"memory\" (%"PRIu64"KB) is not a multiple of 
> a page size\n",

Seeing how PowerPC has 64KiB it might be prudent to print PAGE_SIZE to
avoid surprises later.

Same remark about panic() vs self-healing (either is fine. It's this
middle ground that looks off).

> +               d, mem);
> +        return -EINVAL;
> +    }
> +
>      rc = domain_p2m_set_allocation(d, mem, node);
>      if ( rc != 0 )
>          return rc;

Cheers,
Alejandro



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.