On 15/02/2023 1:12 pm, Juergen Gross wrote:
> On 15.02.23 13:42, Jan Beulich wrote:
>> On 15.02.2023 13:05, Juergen Gross wrote:
>>> On 15.02.23 12:33, Jan Beulich wrote:
>>>> First of all drop 32-bit leftovers, including the inclusion of the
>>>> file
>>>> from head_32.S.
>>>
>>> I don't see why we would want to drop 32-bit HVM and PVH support.
>>
>> HVM doesn't use this, does it? But yes, the PVH aspect as well as ...
>
> hypercall_page is located in xen-head.S.
>
>>
>>>> --- a/arch/x86/kernel/head_32.S
>>>> +++ b/arch/x86/kernel/head_32.S
>>>> @@ -524,8 +524,6 @@ __INITRODATA
>>>>    int_msg:
>>>>        .asciz "Unknown interrupt or fault at: %p %p %p\n"
>>>>    -#include "../../x86/xen/xen-head.S"
>>>> -
>>>
>>> This is wrong for non-PV cases.
>>
>> ... this and ...
>>
>>>> --- a/arch/x86/xen/xen-head.S
>>>> +++ b/arch/x86/xen/xen-head.S
>>>> @@ -83,27 +83,33 @@ SYM_CODE_END(asm_cpu_bringup_and_idle)
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,       .asciz "linux")
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,  .asciz "2.6")
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,    .asciz "xen-3.0")
>>>> -#ifdef CONFIG_X86_32
>>>> -    ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE,      _ASM_PTR __PAGE_OFFSET)
>>>> -#else
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE,      _ASM_PTR
>>>> __START_KERNEL_map)
>>>
>>> This will be wrong for 32-bit guests now. I'm not sure the value is
>>> really
>>> used in Xen for non-PV guests, though.
>>>
>>>>        /* Map the p2m table to a 512GB-aligned user address. */
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_INIT_P2M,       .quad (PUD_SIZE *
>>>> PTRS_PER_PUD))
>>>
>>> Move this under the CONFIG_PV umbrella?
>>
>> ... these occurred to me over lunch (and I was hoping to be able to
>> point
>> out my mistake before getting feedback). I'll check whether VIRT_BASE
>> can
>> also be moved into the PV-only section.
>
> Thanks.
>
>>
>>>> -#endif
>>>>    #ifdef CONFIG_XEN_PV
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_ENTRY,          _ASM_PTR startup_xen)
>>>> +    ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .ascii
>>>> "!writable_page_tables")
>>>> +    ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz "yes")
>>>> +    ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,
>>>> +        .quad _PAGE_PRESENT; .quad _PAGE_PRESENT)
>>>> +# define FEATURES_PV (1 << XENFEAT_writable_page_tables)
>>>> +#else
>>>> +# define FEATURES_PV 0
>>>> +#endif
>>>> +#ifdef CONFIG_XEN_PVH
>>>> +# define FEATURES_PVH (1 << XENFEAT_linux_rsdp_unrestricted)
>>>> +#else
>>>> +# define FEATURES_PVH 0
>>>> +#endif
>>>> +#ifdef CONFIG_XEN_DOM0
>>>> +# define FEATURES_DOM0 (1 << XENFEAT_dom0)
>>>> +#else
>>>> +# define FEATURES_DOM0 0
>>>>    #endif
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, _ASM_PTR
>>>> hypercall_page)
>>>> -    ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,
>>>> -        .ascii "!writable_page_tables|pae_pgdir_above_4gb")
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES,
>>>> -        .long (1 << XENFEAT_writable_page_tables) |       \
>>>> -              (1 << XENFEAT_dom0) |                       \
>>>> -              (1 << XENFEAT_linux_rsdp_unrestricted))
>>>> -    ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz "yes")
>>>> +        .long FEATURES_PV | FEATURES_PVH | FEATURES_DOM0)
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz "generic")
>>>> -    ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,
>>>> -        .quad _PAGE_PRESENT; .quad _PAGE_PRESENT)
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long 1)
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_MOD_START_PFN,  .long 1)
>>>>        ELFNOTE(Xen, XEN_ELFNOTE_HV_START_LOW,   _ASM_PTR
>>>> __HYPERVISOR_VIRT_START)
>>>
>>> Are XEN_ELFNOTE_MOD_START_PFN and XEN_ELFNOTE_HV_START_LOW really
>>> relevant
>>> for the non-PV case? I don't think so (in theory
>>> XEN_ELFNOTE_MOD_START_PFN
>>> could be used, but the main reason for its introduction was PV
>>> guests IIRC).
>>
>> I wasn't sufficiently certain for MOD_START_PFN, so I'd prefer to
>> leave it
>> untouched for now. HV_START_LOW might be 32-bit PV only really; I'll
>> check
>> and then maybe drop (or move).
>
> Fine with me.

HV_START_LOW is PV32 only.  It's the negotiation for the virtual address
split with Xen, and was never implemented properly for PV64.

MOD_START_PFN is PV only.  It's not applicable for HVM/PVH.

For PVH guests, XEN_ELFNOTE_PHYS32_ENTRY really is the only necessary
note, and that's what XTF uses.

~Andrew

Reply via email to