• Jason Andryuk's avatar
    x86/pvh: Make PVH entrypoint PIC for x86-64 · 1db29f99
    Jason Andryuk authored
    
    
    The PVH entrypoint is 32bit non-PIC code running the uncompressed
    vmlinux at its load address CONFIG_PHYSICAL_START - default 0x1000000
    (16MB).  The kernel is loaded at that physical address inside the VM by
    the VMM software (Xen/QEMU).
    
    When running a Xen PVH Dom0, the host reserved addresses are mapped 1-1
    into the PVH container.  There exist system firmwares (Coreboot/EDK2)
    with reserved memory at 16MB.  This creates a conflict where the PVH
    kernel cannot be loaded at that address.
    
    Modify the PVH entrypoint to be position-indepedent to allow flexibility
    in load address.  Only the 64bit entry path is converted.  A 32bit
    kernel is not PIC, so calling into other parts of the kernel, like
    xen_prepare_pvh() and mk_pgtable_32(), don't work properly when
    relocated.
    
    This makes the code PIC, but the page tables need to be updated as well
    to handle running from the kernel high map.
    
    The UNWIND_HINT_END_OF_STACK is to silence:
    vmlinux.o: warning: objtool: pvh_start_xen+0x7f: unreachable instruction
    after the lret into 64bit code.
    Signed-off-by: default avatarJason Andryuk <jason.andryuk@amd.com>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Message-ID: <20240823193630.2583107-3-jason.andryuk@amd.com>
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    1db29f99
head.S 4.54 KB