|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] Add device_model_pvdevice parameter for HVM guests
On Thu, 2013-07-18 at 14:47 +0100, Paul Durrant wrote:
> The parameter determines which, if any, xen-pvdevice is specified on the
> QEMU command line. The default value is 'none' which means no argument will
> be passed. A value of 'xenserver' specifies a xen-pvdevice with device-id
> 0xc000 (the initial value in the xenserver namespace - see
> docs/misc/pci-device-reservations.txt).
>
> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxx>
> ---
> v2:
> - Added LIBXL_HAVE_PVDEVICE to libxl.h
> - Added more text to xl.cfg manpage to call out the device-id of
> the xenserver pvdevice and point readers at
> docs/misc/pci-device-reservations.txt
>
> docs/man/xl.cfg.pod.5 | 23 +++++++++++++++++++++++
> tools/libxl/libxl.h | 8 ++++++++
> tools/libxl/libxl_dm.c | 9 +++++++++
> tools/libxl/libxl_types.idl | 5 +++++
> tools/libxl/xl_cmdimpl.c | 14 ++++++++++++++
> 5 files changed, 59 insertions(+)
>
> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
> index 069b73f..bf6760f 100644
> --- a/docs/man/xl.cfg.pod.5
> +++ b/docs/man/xl.cfg.pod.5
> @@ -1227,6 +1227,29 @@ you have selected.
>
> Assign an XSM security label to the device-model stubdomain.
>
> +=item B<device_model_pvdevice="PVDEVICE">
> +
> +Selects which variant of the xen-pvdevice should be used for this
> +guest. Valid values are:
> +
> +=over 4
> +
> +=item B<none>
> +
> +The xen-pvdevice should be omitted. This is the default.
> +
> +=item B<xenserver>
> +
> +The xenserver variant of the xen-pvdevice (device-id=C000) will be
> +specified, enabling the use of XenServer PV drivers in the guest.
> +
> +=back
> +
> +This parameter only takes effect when device_model_version=qemu-xen.
> +See F<docs/misc/pci-device-reservations.txt> for more information.
> +
> +=back
> +
> =item B<device_model_args=[ "ARG", "ARG", ...]>
>
> Pass additional arbitrary options on the device-model command
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index 37e4d82..4170861 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -82,6 +82,14 @@
> #define LIBXL_HAVE_DOMAIN_NODEAFFINITY 1
>
> /*
> + * LIBXL_HAVE_PVDEVICE indicates that the libxl_device_model_pvdevice
> + * field is present in the hvm sections of libxl_domain_build_info.
> + * This field tells libxl which flavour of xen-pvdevice to enable in
> + * QEMU.
> + */
> +#define LIBXL_HAVE_PVDEVICE 1
Can we expand this name a bit, to make it clear what PVDEVICE refers to?
LIBXL_HAVE_PLATFORM_PVDEVICE_TYPES? or _VARIANTS? Bit clumsy?
While at it I'd be tempted to
s/device_model_pvdevice/platform_device_type/ or something in the API
(both the Enum and the field). The related overall boolean control is
xen_platform_pci, so perhaps something derived from that?
Sorry for spotting this after so long.
> +
> +/*
> * libxl ABI compatibility
> *
> * The only guarantee which libxl makes regarding ABI compatibility
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index 7e54c02..2a2665b 100644
> --- a/tools/libxl/libxl_dm.c
> +++ b/tools/libxl/libxl_dm.c
> @@ -647,6 +647,15 @@ static char **
> libxl__build_device_model_args_new(libxl__gc *gc,
> flexarray_append(dm_args, "-drive");
> flexarray_append(dm_args, drive);
> }
> +
> + switch (b_info->u.hvm.device_model_pvdevice) {
> + case LIBXL_DEVICE_MODEL_PVDEVICE_XENSERVER:
> + flexarray_append(dm_args, "-device");
> + flexarray_append(dm_args, "xen-pvdevice,device-id=0xc000");
> + break;
> + default:
> + break;
> + }
> }
> flexarray_append(dm_args, NULL);
> return (char **) flexarray_contents(dm_args);
> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
> index d218a2d..7165139 100644
> --- a/tools/libxl/libxl_types.idl
> +++ b/tools/libxl/libxl_types.idl
> @@ -132,6 +132,10 @@ libxl_vga_interface_type =
> Enumeration("vga_interface_type", [
> (2, "STD"),
> ], init_val = 0)
>
> +libxl_device_model_pvdevice = Enumeration("device_model_pvdevice", [
> + (0, "NONE"),
> + (1, "XENSERVER"),
> + ])
> #
> # Complex libxl types
> #
> @@ -332,6 +336,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
> ("soundhw", string),
> ("xen_platform_pci", libxl_defbool),
> ("usbdevice_list",
> libxl_string_list),
> + ("device_model_pvdevice",
> libxl_device_model_pvdevice),
> ])),
> ("pv", Struct(None, [("kernel", string),
> ("slack_memkb", MemKB),
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 8a478ba..cfaa54e 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -1526,6 +1526,20 @@ skip_vfb:
> exit (1);
>
> }
> +
> + if (!xlu_cfg_get_string (config, "device_model_pvdevice", &buf, 0)) {
> + libxl_device_model_pvdevice d;
> +
> + e = libxl_device_model_pvdevice_from_string(buf, &d);
> + if (e) {
> + fprintf(stderr,
> + "xl: unknown device_model_pvdevice '%s'\n",
> + buf);
> + exit(-ERROR_FAIL);
> + }
> +
> + b_info->u.hvm.device_model_pvdevice = d;
> + }
> }
>
> xlu_cfg_destroy(config);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |