From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: "Roger Pau Monné" <roger.pau@citrix.com>,
"Daniel P . Smith" <dpsmith@apertussolutions.com>,
"Frediano Ziglio" <frediano.ziglio@cloud.com>,
"Alejandro Vallejo" <alejandro.vallejo@cloud.com>,
Xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH 1/2] x86/trampoline: Document how the trampoline is laid out
Date: Wed, 13 Nov 2024 11:19:29 +0000 [thread overview]
Message-ID: <db7d200d-a13c-4cb4-9860-5a40cc039db7@citrix.com> (raw)
In-Reply-To: <5f58dda2-1619-4416-b711-c600367d6f47@suse.com>
On 13/11/2024 10:20 am, Jan Beulich wrote:
> On 13.11.2024 10:30, 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 0x0140
>> Boot: 0x01f0 0x1780
>> Heap: 0x1970 0xe690
>> Stack: 0xf000 0x1000
>>
>> and wakeup_stack overlays boot_edd_info.
>>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.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>
>> ---
>> xen/arch/x86/include/asm/trampoline.h | 55 ++++++++++++++++++++++++++-
>> 1 file changed, 53 insertions(+), 2 deletions(-)
>>
>> diff --git a/xen/arch/x86/include/asm/trampoline.h b/xen/arch/x86/include/asm/trampoline.h
>> index 8c1e0b48c2c9..d801bea400dc 100644
>> --- a/xen/arch/x86/include/asm/trampoline.h
>> +++ b/xen/arch/x86/include/asm/trampoline.h
>> @@ -37,12 +37,63 @@
>> * 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
>> + * undefined part of the the boot trampoline. The stack is only used with
>> + * paging disabled.
>> + *
>> + * 3) Boot trampoline:
>> + *
>> + * This region houses various data used by the AP/S3 paths too.
> This is confusing to have here - isn't the boot part (that isn't in the
> same page as the tail of the AP/S3 region) being boot-time only, and hence
> unavailable for S3 and post-boot AP bringup? Both here and with the numbers
> in the description - what position did you use as separator between 2) and
> 3)?
>
> Then again it may be just me who is confused: Didn't we, at some point, limit
> the resident trampoline to just one page? Was that only a plan, or a patch
> that never was committed?
The positioning of various things is rather complicated.
Only a single 4k page is mapped into idle_pg_table[].
But, the AP/S3 path use:
trampoline_cpu_started
idt_48
gdt_48
trampoline_xen_phys_start
trampoline_misc_enable_off
trampoline_efer
Which is beyond the content of wakeup.S. The GDT in particular needs to
stay valid with paging enabled, to load __HYPERVISOR_CS.
We have /* From here on early boot only. */ in trampoline.S but that
seems to be the extent of checking. Everything needed for AP/S3 is in
the first 0x229.
I'm open to suggestions for how to describe this better, although the
left hand side of the diagram is already very busy.
I suppose I could do AP+S3 as a single section, along their combined data?
>
>> 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 and has 4k
>> + * space reserved.
>> + *
>> + * 4) Heap space:
>> + *
>> + * The first 1k of heap space is statically allocated 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,
>> + * module list, etc). It does so with a bump allocator starting from the
>> + * end of the heap and allocating backwards.
>> + *
>> + * 5) Boot stack:
>> + *
>> + * 4k of space is reserved for the boot stack, at trampoline_phys + 64k.
> Perhaps add "ending" to clarify it doesn't go beyond +64k? It's being expressed
> ...
Ah yes. That ended up less clear than I was intending. I'll adjust.
~Andrew
next prev parent reply other threads:[~2024-11-13 11:20 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-13 9:30 [PATCH 0/2] x86/trampoline: Layout description improvements Andrew Cooper
2024-11-13 9:30 ` [PATCH 1/2] x86/trampoline: Document how the trampoline is laid out Andrew Cooper
2024-11-13 10:20 ` Jan Beulich
2024-11-13 11:19 ` Andrew Cooper [this message]
2024-11-13 11:23 ` Frediano Ziglio
2024-11-13 11:24 ` Jan Beulich
2024-11-13 11:26 ` Jan Beulich
2024-11-13 9:30 ` [PATCH 2/2] x86/trampoline: Rationalise the constants to describe the size Andrew Cooper
2024-11-13 10:18 ` Frediano Ziglio
2024-11-13 10:58 ` Frediano Ziglio
2024-11-13 10:23 ` Jan Beulich
2024-11-13 11:52 ` Andrew Cooper
2024-11-13 12:00 ` Jan Beulich
2024-11-13 11:36 ` Andrew Cooper
2024-11-13 11:51 ` Frediano Ziglio
2024-11-13 12:02 ` 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=db7d200d-a13c-4cb4-9860-5a40cc039db7@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=alejandro.vallejo@cloud.com \
--cc=dpsmith@apertussolutions.com \
--cc=frediano.ziglio@cloud.com \
--cc=jbeulich@suse.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.