xen: pvhvm: allow user to request no emulated device unplug
authorIan Campbell <ian.campbell@citrix.com>
Mon, 23 Aug 2010 10:59:28 +0000 (11:59 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Mon, 23 Aug 2010 10:59:28 +0000 (11:59 +0100)
this allows the user to disable pvhvm and revert to emulated devices
in case of a system misconfiguration (e.g. initramfs with only
emulated drivers in it).

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Acked-by: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Documentation/kernel-parameters.txt
arch/x86/xen/platform-pci-unplug.c
include/xen/platform_pci.h

index 2c85c06..8bbe83b 100644 (file)
@@ -2631,6 +2631,7 @@ and is between 256 and 4096 characters. It is defined in the file
                        all -- unplug all emulated devices (NICs and IDE disks)
                        ignore -- continue loading the Xen platform PCI driver even
                                if the version check failed
+                       never -- do not unplug even if version check succeeds
 
        xirc2ps_cs=     [NET,PCMCIA]
                        Format:
index 554c002..070dfa0 100644 (file)
@@ -72,6 +72,9 @@ void __init xen_unplug_emulated_devices(void)
 {
        int r;
 
+       /* user explicitly requested no unplug */
+       if (xen_emul_unplug & XEN_UNPLUG_NEVER)
+               return;
        /* check the version of the xen platform PCI device */
        r = check_platform_magic();
        /* If the version matches enable the Xen platform PCI driver.
@@ -127,6 +130,8 @@ static int __init parse_xen_emul_unplug(char *arg)
                        xen_emul_unplug |= XEN_UNPLUG_ALL_NICS;
                else if (!strncmp(p, "ignore", l))
                        xen_emul_unplug |= XEN_UNPLUG_IGNORE;
+               else if (!strncmp(p, "never", l))
+                       xen_emul_unplug |= XEN_UNPLUG_NEVER;
                else
                        printk(KERN_WARNING "unrecognised option '%s' "
                                 "in parameter 'xen_emul_unplug'\n", p);
index ce9d671..123b775 100644 (file)
@@ -21,6 +21,7 @@
 #define XEN_UNPLUG_AUX_IDE_DISKS 4
 #define XEN_UNPLUG_ALL 7
 #define XEN_UNPLUG_IGNORE 8
+#define XEN_UNPLUG_NEVER 16
 
 static inline int xen_must_unplug_nics(void) {
 #if (defined(CONFIG_XEN_NETDEV_FRONTEND) || \