]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
xen: Introduce 'xen_nopv' to disable PV extensions for HVM guests.
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Fri, 11 Jul 2014 15:51:35 +0000 (11:51 -0400)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Mon, 14 Jul 2014 16:21:59 +0000 (12:21 -0400)
By default when CONFIG_XEN and CONFIG_XEN_PVHVM kernels are
run, they will enable the PV extensions (drivers, interrupts, timers,
etc) - which is the best option for the majority of use cases.

However, in some cases (kexec not fully working, benchmarking)
we want to disable Xen PV extensions. As such introduce the
'xen_nopv' parameter that will do it.

This parameter is intended only for HVM guests as the Xen PV
guests MUST boot with PV extensions. However, even if you use
'xen_nopv' on Xen PV guests it will be ignored.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: David Vrabel <david.vrabel@citrix.com>
---
[v2: s/off/xen_nopv/ per Boris Ostrovsky recommendation.]
[v3: Add Reviewed-by]
[v4: Clarify that this is only for HVM guests]

Documentation/kernel-parameters.txt
arch/x86/xen/enlighten.c

index c1b9aa8c5a52e807e6458d40d96d4f1bc91f107b..403f927276cd7d59482373b2bb9d2a893e2f77a4 100644 (file)
@@ -3691,6 +3691,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        Disables the ticketlock slowpath using Xen PV
                        optimizations.
 
+       xen_nopv        [X86]
+                       Disables the PV optimizations forcing the HVM guest to
+                       run as generic HVM guest with no PV drivers.
+
        xirc2ps_cs=     [NET,PCMCIA]
                        Format:
                        <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
index ffb101e457310e578e6b7c5b6a603a52d3571dc8..eb822391b84c8eba969e7c26bbf0271ec0baf5d8 100644 (file)
@@ -1826,8 +1826,19 @@ static void __init xen_hvm_guest_init(void)
        xen_hvm_init_mmu_ops();
 }
 
+static bool xen_nopv = false;
+static __init int xen_parse_nopv(char *arg)
+{
+       xen_nopv = true;
+       return 0;
+}
+early_param("xen_nopv", xen_parse_nopv);
+
 static uint32_t __init xen_hvm_platform(void)
 {
+       if (xen_nopv)
+               return 0;
+
        if (xen_pv_domain())
                return 0;
 
@@ -1836,6 +1847,8 @@ static uint32_t __init xen_hvm_platform(void)
 
 bool xen_hvm_need_lapic(void)
 {
+       if (xen_nopv)
+               return false;
        if (xen_pv_domain())
                return false;
        if (!xen_hvm_domain())