Stefano Stabellini
2010-May-10 14:20 UTC
[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@eu.citrix.com> --- 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@lists.xensource.com http://lists.xensource.com/xen-devel