From: "Alejandro Vallejo" <alejandro.vallejo@cloud.com>
To: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Xen-devel" <xen-devel@lists.xenproject.org>
Cc: "Frediano Ziglio" <frediano.ziglio@cloud.com>,
"Jan Beulich" <JBeulich@suse.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Daniel P . Smith" <dpsmith@apertussolutions.com>
Subject: Re: [PATCH v2 3/4] x86/trampoline: Document how the trampoline is laid out
Date: Thu, 14 Nov 2024 10:48:52 +0000 [thread overview]
Message-ID: <D5LUCQ9MH2C2.1L6CFH028NYPS@cloud.com> (raw)
In-Reply-To: <20241114090810.1961175-4-andrew.cooper3@citrix.com>
On Thu Nov 14, 2024 at 9:08 AM GMT, Andrew Cooper wrote:
> This is, to the best of my knowledge, accurate. I am providing no comment on
> how sane I believe it to be.
>
> At the time of writing, the sizes of the regions are:
>
> offset size
> AP: 0x0000 0x00b0
> S3: 0x00b0 0x0229
> Boot: 0x02d9 0x1697
> Heap: 0x1970 0xe690
> Stack: 0xf000 0x1000
>
> and wakeup_stack overlays boot_edd_info.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Reviewed-by: Frediano Ziglio <frediano.ziglio@cloud.com>
> ---
> CC: Jan Beulich <JBeulich@suse.com>
> CC: Roger Pau Monné <roger.pau@citrix.com>
> CC: Daniel P. Smith <dpsmith@apertussolutions.com>
> CC: Frediano Ziglio <frediano.ziglio@cloud.com>
> CC: Alejandro Vallejo <alejandro.vallejo@cloud.com>
>
> v2:
> * Rebase over the introduction of trampoline_perm_end
> * Fix the description of the boot stack position
> ---
> xen/arch/x86/include/asm/trampoline.h | 57 ++++++++++++++++++++++++++-
> 1 file changed, 55 insertions(+), 2 deletions(-)
>
> diff --git a/xen/arch/x86/include/asm/trampoline.h b/xen/arch/x86/include/asm/trampoline.h
> index 8c1e0b48c2c9..559111d2ccfc 100644
> --- a/xen/arch/x86/include/asm/trampoline.h
> +++ b/xen/arch/x86/include/asm/trampoline.h
> @@ -37,12 +37,65 @@
> * manually as part of placement.
> */
>
> +/*
> + * Layout of the trampoline. Logical areas, in ascending order:
> + *
> + * 1) AP boot:
> + *
> + * The INIT-SIPI-SIPI entrypoint. This logic is stack-less so the identity
> + * mapping (which must be executable) can at least be Read Only.
> + *
> + * 2) S3 resume:
> + *
> + * The S3 wakeup logic may need to interact with the BIOS, so needs a
> + * stack. The stack pointer is set to trampoline_phys + 4k and clobbers an
> + * arbitrary part of the the boot trampoline. The stack is only used with
> + * paging disabled.
> + *
> + * 3) Boot trampoline:
> + *
> + * The boot trampoline collects data from the BIOS (E820/EDD/EDID/etc), so
> + * needs a stack. The stack pointer is set to trampoline_phys + 64k, is 4k
> + * in size, and only used with paging disabled.
> + *
> + * 4) Heap space:
> + *
> + * The first 1k of heap space is statically allocated scratch space for
> + * VESA information.
> + *
> + * The remainder of the heap is used by reloc(), logic which is otherwise
> + * outside of the trampoline, to collect the bootloader metadata (cmdline,
Wh> + * module list, etc). It does so with a bump allocator starting from the
> + * end of the heap and allocating backwards.
> + *
> + * 5) Boot stack:
> + *
> + * The boot stack is 4k in size at the end of the trampoline, taking the
> + * total trampoline size to 64k.
> + *
> + * Therefore, when placed, it looks somewhat like this:
> + *
> + * +--- trampoline_phys
> + * v
> + * |<-------------------------------64K------------------------------->|
> + * |<-----4K----->| |<---4K--->|
> + * +-------+------+-+---------------------------------------+----------+
> + * | AP+S3 | Boot | Heap | Stack |
> + * +-------+------+-+---------------------------------------+----------+
> + * ^ ^ <~~^ ^ <~~^ <~~^
> + * | | | +- trampoline_end[] | |
> + * | | +--- wakeup_stack reloc() allocator -+ |
> + * | +---------- trampoline_perm_end Boot Stack ------------+
> + * +------------------ trampoline_start[]
> + */
Neat. Nothing like a pretty picture to properly explain things.
> +
> #include <xen/compiler.h>
> #include <xen/types.h>
>
> /*
> - * Start and end of the trampoline section, as linked into Xen. It is within
> - * the .init section and reclaimed after boot.
> + * Start and end of the trampoline section, as linked into Xen. This covers
> + * the AP, S3 and Boot regions, but not the heap or stack. It is within the
> + * .init section and reclaimed after boot.
How can it be reclaimed after boot if it's used for S3 wakeups? I assume you
meant that the heap and stack are reclaimed after boot, but from that wording
it sounds like the other way around.
> */
> /* SAF-0-safe */
> extern char trampoline_start[], trampoline_end[];
Cheers,
Alejandro
next prev parent reply other threads:[~2024-11-14 10:49 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 9:08 [PATCH v2 0/4] x86/trampoline: Layout description improvements Andrew Cooper
2024-11-14 9:08 ` [PATCH v2 1/4] x86/trampoline: Check the size permanent trampoline at link time Andrew Cooper
2024-11-14 10:07 ` Jan Beulich
2024-11-14 9:08 ` [PATCH v2 2/4] x86/trampoline: Simplify the wakeup_stack checks Andrew Cooper
2024-11-14 10:10 ` Jan Beulich
2024-11-14 9:08 ` [PATCH v2 3/4] x86/trampoline: Document how the trampoline is laid out Andrew Cooper
2024-11-14 10:12 ` Jan Beulich
2024-11-14 10:48 ` Alejandro Vallejo [this message]
2024-11-14 11:17 ` Andrew Cooper
2024-11-14 18:34 ` Andrew Cooper
2024-11-15 11:17 ` Alejandro Vallejo
2024-11-14 9:08 ` [PATCH v2 4/4] x86/trampoline: Rationalise the constants to describe the size Andrew Cooper
2024-11-14 10:13 ` Jan Beulich
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=D5LUCQ9MH2C2.1L6CFH028NYPS@cloud.com \
--to=alejandro.vallejo@cloud.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=dpsmith@apertussolutions.com \
--cc=frediano.ziglio@cloud.com \
--cc=roger.pau@citrix.com \
--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.