|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/2] x86/trampoline: Rationalise the constants to describe the size
On Wed, Nov 13, 2024 at 9:31 AM Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote:
>
> The logic is far more sane to follow with a total size, and the position of
> the end of the heap. Remove or fix the the remaining descriptions of how the
typo: the the
> trampoline is laid out.
>
> No functional change. The compiled binary is identical.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> CC: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx>
> CC: Frediano Ziglio <frediano.ziglio@xxxxxxxxx>
> CC: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx>
> ---
> xen/arch/x86/boot/head.S | 21 ++-------------------
> xen/arch/x86/boot/reloc.c | 5 ++---
> xen/arch/x86/efi/efi-boot.h | 2 +-
> xen/arch/x86/include/asm/config.h | 5 +++--
> xen/arch/x86/xen.lds.S | 2 +-
> 5 files changed, 9 insertions(+), 26 deletions(-)
>
> diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S
> index dcda91cfda49..b31cf83758c1 100644
> --- a/xen/arch/x86/boot/head.S
> +++ b/xen/arch/x86/boot/head.S
> @@ -494,7 +494,7 @@ trampoline_bios_setup:
>
> 2:
> /* Reserve memory for the trampoline and the low-memory stack. */
> - sub $((TRAMPOLINE_SPACE+TRAMPOLINE_STACK_SPACE)>>4),%ecx
> + sub $TRAMPOLINE_SIZE >> 4, %ecx
>
> /* From arch/x86/smpboot.c: start_eip had better be page-aligned! */
> xor %cl, %cl
> @@ -525,23 +525,6 @@ trampoline_setup:
> mov %eax, sym_esi(multiboot_ptr)
> 2:
>
> - /*
> - * Now trampoline_phys points to the following structure (lowest
> address
> - * is at the bottom):
> - *
> - * +------------------------+
> - * | TRAMPOLINE_STACK_SPACE |
> - * +------------------------+
> - * | Data (MBI / PVH) |
> - * +- - - - - - - - - - - - +
> - * | TRAMPOLINE_SPACE |
> - * +------------------------+
> - *
> - * Data grows downwards from the highest address of TRAMPOLINE_SPACE
> - * region to the end of the trampoline. The rest of TRAMPOLINE_SPACE
> is
> - * reserved for trampoline code and data.
> - */
> -
I fail to see a similar description somewhere now.
> /* Interrogate CPU extended features via CPUID. */
> mov $1, %eax
> cpuid
> @@ -713,7 +696,7 @@ trampoline_setup:
> 1:
> /* Switch to low-memory stack which lives at the end of trampoline
> region. */
> mov sym_esi(trampoline_phys), %edi
> - lea TRAMPOLINE_SPACE+TRAMPOLINE_STACK_SPACE(%edi),%esp
> + lea TRAMPOLINE_SIZE(%edi), %esp
> lea trampoline_boot_cpu_entry-trampoline_start(%edi),%eax
> pushl $BOOT_CS32
> push %eax
> diff --git a/xen/arch/x86/boot/reloc.c b/xen/arch/x86/boot/reloc.c
> index e50e161b2740..1f47e10f7fa6 100644
> --- a/xen/arch/x86/boot/reloc.c
> +++ b/xen/arch/x86/boot/reloc.c
> @@ -65,7 +65,7 @@ typedef struct memctx {
> /*
> * Simple bump allocator.
> *
> - * It starts from the base of the trampoline and allocates downwards.
> + * It starts from end of of the trampoline heap and allocates downwards.
Nice !
Minor typo "It starts from the end of the trampoline heap and
allocates downwards."
> */
> uint32_t ptr;
> } memctx;
> @@ -349,8 +349,7 @@ static multiboot_info_t *mbi2_reloc(uint32_t mbi_in,
> memctx *ctx)
> /* SAF-1-safe */
> void *reloc(uint32_t magic, uint32_t in)
> {
> - /* Get bottom-most low-memory stack address. */
> - memctx ctx = { trampoline_phys + TRAMPOLINE_SPACE };
> + memctx ctx = { trampoline_phys + TRAMPOLINE_HEAP_END };
>
> switch ( magic )
> {
> diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
> index 7930b7c73892..9d3f2b71447e 100644
> --- a/xen/arch/x86/efi/efi-boot.h
> +++ b/xen/arch/x86/efi/efi-boot.h
> @@ -633,7 +633,7 @@ static void __init efi_arch_memory_setup(void)
> if ( efi_enabled(EFI_LOADER) )
> cfg.size = trampoline_end - trampoline_start;
> else
> - cfg.size = TRAMPOLINE_SPACE + TRAMPOLINE_STACK_SPACE;
> + cfg.size = TRAMPOLINE_SIZE;
>
> status = efi_bs->AllocatePages(AllocateMaxAddress, EfiLoaderData,
> PFN_UP(cfg.size), &cfg.addr);
> diff --git a/xen/arch/x86/include/asm/config.h
> b/xen/arch/x86/include/asm/config.h
> index f8a5a4913b07..20141ede31a1 100644
> --- a/xen/arch/x86/include/asm/config.h
> +++ b/xen/arch/x86/include/asm/config.h
> @@ -51,8 +51,9 @@
>
> #define IST_SHSTK_SIZE 1024
>
> -#define TRAMPOLINE_STACK_SPACE PAGE_SIZE
> -#define TRAMPOLINE_SPACE (KB(64) - TRAMPOLINE_STACK_SPACE)
> +/* See asm/trampoline.h */
I fail to see any description and need for a heap or why the size is 64kb.
There is a description about trampoline code and wakeup code but not
the fact we copy MBI data and so we need a heap.
Stack could be just due to the need of it, so implicit, heap a bit less.
> +#define TRAMPOLINE_SIZE KB(64)
> +#define TRAMPOLINE_HEAP_END (TRAMPOLINE_SIZE - PAGE_SIZE)
> #define WAKEUP_STACK_MIN 3072
>
> #define MBI_SPACE_MIN (2 * PAGE_SIZE)
> diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
> index 35693f6e3380..e7d93d1f4ac3 100644
> --- a/xen/arch/x86/xen.lds.S
> +++ b/xen/arch/x86/xen.lds.S
> @@ -410,7 +410,7 @@ ASSERT(!SIZEOF(.plt), ".plt non-empty")
> ASSERT(!SIZEOF(.rela), "leftover relocations")
> #endif
>
> -ASSERT((trampoline_end - trampoline_start) < TRAMPOLINE_SPACE -
> MBI_SPACE_MIN,
> +ASSERT((trampoline_end - trampoline_start) < TRAMPOLINE_HEAP_END -
> MBI_SPACE_MIN,
> "not enough room for trampoline and mbi data")
> ASSERT((wakeup_stack - wakeup_stack_start) >= WAKEUP_STACK_MIN,
> "wakeup stack too small")
Code is nice, just that documentation is stated but missing in my opinion.
Frediano
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |