On 7/7/19 5:15 AM, Zhenzhong Duan wrote:
>  
> +static uint32_t __init xen_platform_hvm(void)
> +{
> +     if (xen_pv_domain())
> +             return 0;
> +
> +     if (xen_pvh_domain() && nopv) {
> +             /* Guest booting via the Xen-PVH boot entry goes here */
> +             pr_info("\"nopv\" parameter is ignored in PVH guest\n");
> +             nopv = false;
> +     } else if (nopv) {
> +             /*
> +              * Guest booting via normal boot entry (like via grub2) goes
> +              * here.
> +              */
> +             x86_init.hyper.guest_late_init = xen_hvm_guest_late_init;
> +             return 0;

After staring at this some more I don't think we can do this.
Hypervisor-specific code should not muck with with x86_init.hyper, it's
layering violation. That's what init_hypervisor_platform() is for.

So we may have to create another hypervisor_x86 ops structure for Xen
nopv (which I don't find very appealing TBH). Or update
x86_hyper_xen_hvm and return xen_cpuid_base() instead of zero (but then
you'd need to update all these structs from __initconst to _init or some
such). Or something else.


-boris


> +     }
> +     return xen_cpuid_base();
> +}
> +
>  const __initconst struct hypervisor_x86 x86_hyper_xen_hvm = {
>       .name                   = "Xen HVM",
>       .detect                 = xen_platform_hvm,
> @@ -268,4 +283,5 @@ static __init void xen_hvm_guest_late_init(void)
>       .init.init_mem_mapping  = xen_hvm_init_mem_mapping,
>       .init.guest_late_init   = xen_hvm_guest_late_init,
>       .runtime.pin_vcpu       = xen_pin_vcpu,
> +     .ignore_nopv            = true,
>  };


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to