On Thu, Apr 22, 2010 at 04:16:50PM +0100, Stefano Stabellini wrote:
> Hi all,
> this patch adds a xen_unplug command line option to the kernel to unplug
> xen emulated devices.
For those folks who don't understand the pain^H^H^Htransition from emulated
device
to a PV device, can you do a more detailed writeup?
Why don't we want this be enabled by default? Perhaps you want to make
the parameter only parse the disable option - devices which we _dont_
want to be unplugged. So paramter name would 'xen_keep_plugged='.
>
> 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 2ce2da1..7acb130 100644
> --- a/arch/x86/xen/enlighten.c
> +++ b/arch/x86/xen/enlighten.c
> @@ -37,6 +37,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>
> @@ -86,6 +87,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
> @@ -1389,9 +1391,35 @@ void __init xen_guest_init(void)
> x86_platform_ipi_callback = 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;
> machine_ops = xen_machine_ops;
> }
>
> +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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|