Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86/Xen: tidy xen-head.S

First of all move PV-only ELF notes inside the XEN_PV conditional; note
that
- HV_START_LOW is dropped altogether, as it was meaningful for 32-bit PV
only,
- the 32-bit instance of VIRT_BASE is dropped, as it would be dead code
once inside the conditional,
- while PADDR_OFFSET is not exactly unused for PVH, it defaults to zero
there, and the hypervisor (or tool stack) complains if it is present
but VIRT_BASE isn't.
Then have the "supported features" note actually report reality: All
three of the features there are supported and/or applicable only in
certain cases.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Link: https://lore.kernel.org/r/f99bacc6-2a2f-41b0-5c0b-e01b7051cb07@suse.com
Signed-off-by: Juergen Gross <jgross@suse.com>

authored by

Jan Beulich and committed by
Juergen Gross
1cfd4ccb fb9b7b4b

+21 -16
+21 -16
arch/x86/xen/xen-head.S
··· 90 90 ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS, .asciz "linux") 91 91 ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION, .asciz "2.6") 92 92 ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION, .asciz "xen-3.0") 93 - #ifdef CONFIG_X86_32 94 - ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE, _ASM_PTR __PAGE_OFFSET) 95 - #else 93 + #ifdef CONFIG_XEN_PV 96 94 ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE, _ASM_PTR __START_KERNEL_map) 97 95 /* Map the p2m table to a 512GB-aligned user address. */ 98 96 ELFNOTE(Xen, XEN_ELFNOTE_INIT_P2M, .quad (PUD_SIZE * PTRS_PER_PUD)) 99 - #endif 100 - #ifdef CONFIG_XEN_PV 101 97 ELFNOTE(Xen, XEN_ELFNOTE_ENTRY, _ASM_PTR startup_xen) 102 - #endif 103 - ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, _ASM_PTR hypercall_page) 104 - ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, 105 - .ascii "!writable_page_tables|pae_pgdir_above_4gb") 106 - ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, 107 - .long (1 << XENFEAT_writable_page_tables) | \ 108 - (1 << XENFEAT_dom0) | \ 109 - (1 << XENFEAT_linux_rsdp_unrestricted)) 98 + ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .ascii "!writable_page_tables") 110 99 ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz "yes") 111 - ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz "generic") 112 100 ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID, 113 101 .quad _PAGE_PRESENT; .quad _PAGE_PRESENT) 114 - ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long 1) 115 102 ELFNOTE(Xen, XEN_ELFNOTE_MOD_START_PFN, .long 1) 116 - ELFNOTE(Xen, XEN_ELFNOTE_HV_START_LOW, _ASM_PTR __HYPERVISOR_VIRT_START) 117 103 ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET, _ASM_PTR 0) 104 + # define FEATURES_PV (1 << XENFEAT_writable_page_tables) 105 + #else 106 + # define FEATURES_PV 0 107 + #endif 108 + #ifdef CONFIG_XEN_PVH 109 + # define FEATURES_PVH (1 << XENFEAT_linux_rsdp_unrestricted) 110 + #else 111 + # define FEATURES_PVH 0 112 + #endif 113 + #ifdef CONFIG_XEN_DOM0 114 + # define FEATURES_DOM0 (1 << XENFEAT_dom0) 115 + #else 116 + # define FEATURES_DOM0 0 117 + #endif 118 + ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, _ASM_PTR hypercall_page) 119 + ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, 120 + .long FEATURES_PV | FEATURES_PVH | FEATURES_DOM0) 121 + ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz "generic") 122 + ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long 1) 118 123 119 124 #endif /*CONFIG_XEN */