From: Jan Beulich <jbeulich@suse.com>
To: Xenia Ragiadakou <xenia.ragiadakou@amd.com>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Wei Liu" <wl@xen.org>,
xen-devel@lists.xenproject.org,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: [PATCH] x86/hvm/dom0: fix PVH initrd and metadata placement
Date: Mon, 30 Oct 2023 13:12:21 +0100 [thread overview]
Message-ID: <e40fba96-87ec-09a7-e095-28637d112e56@suse.com> (raw)
In-Reply-To: <b203d30f-1563-45b6-9469-b25dda8df9a4@amd.com>
On 30.10.2023 08:37, Xenia Ragiadakou wrote:
> Jan would it be possible to sketch a patch of your suggested solution
> because I 'm afraid I have not fully understood it yet and I won't be
> able to implement it properly for a v2?
While what Roger sent looks to be sufficient, I still thought I'd send
my variant, which I think yields more overall consistent results. Like
Roger's this isn't really tested (beyond making sure it builds).
Jan
From: Xenia Ragiadakou <xenia.ragiadakou@amd.com>
Subject: x86/hvm/dom0: fix PVH initrd and metadata placement
Given that start < kernel_end and end > kernel_start, the logic that
determines the best placement for dom0 initrd and metadata, does not
take into account the two cases below:
(1) start > kernel_start && end > kernel_end
(2) start < kernel_start && end < kernel_end
In case (1), the evaluation will result in end = kernel_start
i.e. end < start, and will load initrd in the middle of the kernel.
In case (2), the evaluation will result in start = kernel_end
i.e. end < start, and will load initrd at kernel_end, that is out
of the memory region under evaluation.
This patch reorganizes the conditionals to include so far unconsidered
cases as well, uniformly returning the lowest available address.
Fixes: 73b47eea2104 ('x86/dom0: improve PVH initrd and metadata placement')
Signed-off-by: Xenia Ragiadakou <xenia.ragiadakou@amd.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
Contrary to my original intentions, with the function preferring lower
addresses (by walking the E820 table forwards), the new cases also
return lowest-possible addresses.
---
v2: Cover further cases of overlap.
--- a/xen/arch/x86/hvm/dom0_build.c
+++ b/xen/arch/x86/hvm/dom0_build.c
@@ -515,16 +515,23 @@ static paddr_t __init find_memory(
ASSERT(IS_ALIGNED(start, PAGE_SIZE) && IS_ALIGNED(end, PAGE_SIZE));
+ /*
+ * NB: Even better would be to use rangesets to determine a suitable
+ * range, in particular in case a kernel requests multiple heavily
+ * discontiguous regions (which right now we fold all into one big
+ * region).
+ */
if ( end <= kernel_start || start >= kernel_end )
- ; /* No overlap, nothing to do. */
+ {
+ /* No overlap, just check whether the region is large enough. */
+ if ( end - start >= size )
+ return start;
+ }
/* Deal with the kernel already being loaded in the region. */
- else if ( kernel_start - start > end - kernel_end )
- end = kernel_start;
- else
- start = kernel_end;
-
- if ( end - start >= size )
+ else if ( kernel_start > start && kernel_start - start >= size )
return start;
+ else if ( kernel_end < end && end - kernel_end >= size )
+ return kernel_end;
}
return INVALID_PADDR;
next prev parent reply other threads:[~2023-10-30 12:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-26 6:45 [PATCH] x86/hvm/dom0: fix PVH initrd and metadata placement Xenia Ragiadakou
2023-10-26 7:35 ` Jan Beulich
2023-10-26 8:34 ` Xenia Ragiadakou
2023-10-26 8:45 ` Jan Beulich
2023-10-26 9:46 ` Xenia Ragiadakou
2023-10-26 11:51 ` Jan Beulich
2023-10-26 12:35 ` Xenia Ragiadakou
2023-10-26 12:37 ` Jan Beulich
2023-10-26 13:58 ` Xenia Ragiadakou
2023-10-26 14:55 ` Jan Beulich
2023-10-26 15:01 ` Roger Pau Monné
2023-10-26 16:55 ` Xenia Ragiadakou
2023-10-27 6:37 ` Jan Beulich
2023-10-27 11:18 ` Xenia Ragiadakou
2023-10-27 12:01 ` Jan Beulich
2023-10-30 7:37 ` Xenia Ragiadakou
2023-10-30 11:18 ` Roger Pau Monné
2023-10-30 12:12 ` Jan Beulich [this message]
2023-10-26 10:31 ` Andrew Cooper
2023-10-26 11:41 ` Jan Beulich
2023-10-26 12:09 ` Xenia Ragiadakou
2023-10-26 12:35 ` Jan Beulich
2023-10-26 14:58 ` Roger Pau Monné
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=e40fba96-87ec-09a7-e095-28637d112e56@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=roger.pau@citrix.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
--cc=xenia.ragiadakou@amd.com \
/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.