[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1/3] xen: pvhvm: allow user to request no emulated device unplug



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@xxxxxxxxxx>
---
 Documentation/kernel-parameters.txt |    1 +
 arch/x86/xen/platform-pci-unplug.c  |   12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/Documentation/kernel-parameters.txt 
b/Documentation/kernel-parameters.txt
index 2c85c06..8bbe83b 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -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:
diff --git a/arch/x86/xen/platform-pci-unplug.c 
b/arch/x86/xen/platform-pci-unplug.c
index 554c002..c82ce1e 100644
--- a/arch/x86/xen/platform-pci-unplug.c
+++ b/arch/x86/xen/platform-pci-unplug.c
@@ -33,7 +33,7 @@
 int xen_platform_pci_unplug;
 EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
 #ifdef CONFIG_XEN_PVHVM
-static int xen_emul_unplug;
+static int xen_emul_unplug = -1;
 
 static int __init check_platform_magic(void)
 {
@@ -72,18 +72,23 @@ void __init xen_unplug_emulated_devices(void)
 {
        int r;
 
+       /* user explicitly requested no unplug */
+       if (xen_emul_unplug == 0)
+               return;
        /* check the version of the xen platform PCI device */
        r = check_platform_magic();
        /* If the version matches enable the Xen platform PCI driver.
         * Also enable the Xen platform PCI driver if the version is really old
         * and the user told us to ignore it. */
        if (r && !(r == XEN_PLATFORM_ERR_MAGIC &&
+                       (xen_emul_unplug != -1) &&
                        (xen_emul_unplug & XEN_UNPLUG_IGNORE)))
                return;
        /* Set the default value of xen_emul_unplug depending on whether or
         * not the Xen PV frontends and the Xen platform PCI driver have
         * been compiled for this kernel (modules or built-in are both OK). */
-       if (!xen_emul_unplug) {
+       if (xen_emul_unplug == -1) {
+               xen_emul_unplug = 0;
                if (xen_must_unplug_nics()) {
                        printk(KERN_INFO "Netfront and the Xen platform PCI 
driver have "
                                        "been compiled for this kernel: unplug 
emulated NICs.\n");
@@ -109,6 +114,7 @@ static int __init parse_xen_emul_unplug(char *arg)
        char *p, *q;
        int l;
 
+       xen_emul_unplug = 0;
        for (p = arg; p; p = q) {
                q = strchr(p, ',');
                if (q) {
@@ -127,6 +133,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))
+                       /* Nothing to do. xen_emul_unplug = 0 above */;
                else
                        printk(KERN_WARNING "unrecognised option '%s' "
                                 "in parameter 'xen_emul_unplug'\n", p);
-- 
1.5.6.5


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.