From: "Alejandro Vallejo" <alejandro.garciavallejo@amd.com>
To: "Michal Orzel" <michal.orzel@amd.com>, <xen-devel@lists.xenproject.org>
Cc: "Stefano Stabellini" <sstabellini@kernel.org>,
"Julien Grall" <julien@xen.org>,
"Bertrand Marquis" <bertrand.marquis@arm.com>,
"Volodymyr Babchuk" <Volodymyr_Babchuk@epam.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Anthony PERARD" <anthony.perard@vates.tech>,
"Jan Beulich" <jbeulich@suse.com>,
"Roger Pau Monné" <roger@xenproject.org>
Subject: Re: [PATCH] xen/arm: Sanity test specified domain's memory for being a multiple of a page size
Date: Wed, 07 Oct 2026 15:40:03 +0200 [thread overview]
Message-ID: <DLYNCSBJ3FOE.IQ4BMB5FFYGL@amd.com> (raw)
In-Reply-To: <20261007124813.177940-1-michal.orzel@amd.com>
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@amd.com>
> ---
> 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
next prev parent reply other threads:[~2026-10-07 13:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 12:48 [PATCH] xen/arm: Sanity test specified domain's memory for being a multiple of a page size Michal Orzel
2026-10-07 13:40 ` Alejandro Vallejo [this message]
2026-10-07 14:11 ` Orzel, Michal
2026-10-07 14:21 ` Alejandro Vallejo
2026-10-07 14:31 ` Orzel, Michal
2026-10-09 8:27 ` Alejandro Vallejo
2026-10-12 8:48 ` Orzel, Michal
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=DLYNCSBJ3FOE.IQ4BMB5FFYGL@amd.com \
--to=alejandro.garciavallejo@amd.com \
--cc=Volodymyr_Babchuk@epam.com \
--cc=andrew.cooper3@citrix.com \
--cc=anthony.perard@vates.tech \
--cc=bertrand.marquis@arm.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=michal.orzel@amd.com \
--cc=roger@xenproject.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.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.