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

[Xen-devel] [PATCH 06/11] unplug emulated devices



Add a xen_unplug command line option to the kernel to unplug
xen emulated devices.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
 arch/x86/xen/enlighten.c |   30 +++++++++++++++++++++++++++++-
 1 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index b9de0f8..7b923fc 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -35,6 +35,7 @@
 #include <xen/interface/memory.h>
 #include <xen/interface/hvm/hvm_op.h>
 #include <xen/interface/hvm/params.h>
+#include <xen/interface/platform_pci.h>
 #include <xen/features.h>
 #include <xen/page.h>
 #include <xen/hvm.h>
@@ -78,6 +79,7 @@ struct shared_info xen_dummy_shared_info;
 void *xen_initial_gdt;
 
 int xen_have_vector_callback;
+int unplug;
 
 /*
  * Point at some empty memory to start with. We map the real shared_info
@@ -1302,8 +1304,34 @@ void __init xen_guest_init(void)
                generic_interrupt_extension = do_hvm_pv_evtchn_intr;
                xen_have_vector_callback = 1;
        }
-
+       if (unplug) {
+               /* unplug emulated devices */
+               outw(UNPLUG_ALL, XEN_IOPORT_UNPLUG);
+       }
        have_vcpu_info_placement = 0;
        x86_init.irqs.intr_init = xen_init_IRQ;
 }
 
+static int __init parse_unplug(char *arg)
+{
+       char *p, *q;
+
+       for (p = arg; p; p = q) {
+               q = strchr(arg, ',');
+               if (q)
+                       *q++ = '\0';
+               if (!strcmp(p, "all"))
+                       unplug |= UNPLUG_ALL;
+               else if (!strcmp(p, "ide-disks"))
+                       unplug |= UNPLUG_ALL_IDE_DISKS;
+               else if (!strcmp(p, "aux-ide-disks"))
+                       unplug |= UNPLUG_AUX_IDE_DISKS;
+               else if (!strcmp(p, "nics"))
+                       unplug |= UNPLUG_ALL_NICS;
+               else
+                       printk(KERN_WARNING "unrecognised option '%s' "
+                                "in module parameter 'dev_unplug'\n", p);
+       }
+       return 0;
+}
+early_param("xen_unplug", parse_unplug);
-- 
1.5.4.3


_______________________________________________
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®.