|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/4] x86/boot: Create the l2_xenmap[] mappings dynamically
On 13.01.2020 18:50, Andrew Cooper wrote:
> The build-time construction of l2_xenmap[] imposes an arbitrary limit of 16M
> total, which is a limit looking to be lifted.
>
> Move l2_xenmap[] into the bss, and adjust both the BIOS and EFI paths to fill
> it in dynamically, based on the final linked size of Xen. For current builds,
> this reduces the number of .text/etc mappings from 7 to 4.
Is the 4 named here applicable the same to xen.gz and xen.efi, despite
the latter using large pages with distinct permissions while the former
still doesn't?
> In principle, the non-EFI case could be made to work by having a post-link
> script fill in a suitable number of _PAGE_PRESENT entries in l2_xenmap[].
> This doesn't work for the EFI case, because pagetable relocation is instead
> triggered on the ad-hoc relocation table, which would require the
> _PAGE_PRESENT references to be in place before the link takes place.
And to be honest, such a post-link script would seem rather ugly
to have to me.
> --- a/xen/arch/x86/boot/head.S
> +++ b/xen/arch/x86/boot/head.S
> @@ -668,6 +668,20 @@ trampoline_setup:
> add %esi,sym_fs(__page_tables_start)-8(,%ecx,8)
> 2: loop 1b
>
> + /* Map Xen into the higher mappings using 2M superpages. */
> + lea _PAGE_PSE + PAGE_HYPERVISOR_RWX + sym_esi(_start), %eax
> + mov $sym_offs(_start), %ecx /* %eax = PTE to write */
The comment is on the wrong line, isn't it? Perhaps
lea _PAGE_PSE + PAGE_HYPERVISOR_RWX + sym_esi(_start), \
%eax /* %eax = PTE to write */
?
> --- a/xen/arch/x86/efi/efi-boot.h
> +++ b/xen/arch/x86/efi/efi-boot.h
> @@ -585,6 +585,20 @@ static void __init efi_arch_memory_setup(void)
> if ( !efi_enabled(EFI_LOADER) )
> return;
>
> + /*
> + * Map Xen into the higher mappings, using 2M superpages.
> + *
> + * NB: We are currently in physical mode, so a RIP-relative relocation
> + * against _start/_end gets their position as placed by the bootloader,
> + * not as expected in the final build. This has arbitrary 2M alignment,
> + * so subtract xen_phys_start to get the appropriate slots in
> l2_xenmap[].
> + */
It may just be a language issue, but I'm struggling with the
"arbitrary" here. Is this in any way related to the
--section-alignment=0x200000 option we pass to the linker (where
the value isn't arbitrary at all)?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |