[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH v1 5/5] libxl: Add "backend_type" property for the Virtio devices
From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> Introduce new configuration option "backend_type" for the Virtio devices in order to specify backend implementation to use. There are two possible values "qemu" (default) and "standalone". If backend is in Qemu (backend_type=qemu) and Qemu runs in toolstack domain (backend=Domain-0) then Qemu will be launched automatically at the guest creation time. For this to work implement "dm_needed" callback. Please note, there is no support for Qemu in other domains for the time being, so the combination of "backend=DomD" and "backend_type=qemu" just won't work. Qemu configuration for Virtio devices should be described via "device_model_args" property. Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx> Reviewed-by: Juergen Gross <jgross@xxxxxxxx> --- docs/man/xl.cfg.5.pod.in | 9 +++++++++ tools/libs/light/libxl_types.idl | 7 +++++++ tools/libs/light/libxl_virtio.c | 29 ++++++++++++++++++++++++++++- tools/xl/xl_parse.c | 3 +++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/docs/man/xl.cfg.5.pod.in b/docs/man/xl.cfg.5.pod.in index 0fba750815..592aad1d1e 100644 --- a/docs/man/xl.cfg.5.pod.in +++ b/docs/man/xl.cfg.5.pod.in @@ -1624,6 +1624,15 @@ are supported. This option is mandatory. The Virtio device with transport "pci" must be identified by its B<BDF>. See L<xl-pci-configuration(5)> for more details about the format for B<BDF>. +=item B<backend_type=STRING> + +Specifies the software implementation of the backend implementation to use. +This option doesn't affect the guest's view of the Virtio device. + +Both "qemu" and "standalone" are supported. The only difference is +that for the former the toolstack assists with configuring and launching +the device-model. If this option is missing, then "qemu" value will be used. + =item B<grant_usage=BOOLEAN> If this option is B<true>, the Xen grants are always enabled. diff --git a/tools/libs/light/libxl_types.idl b/tools/libs/light/libxl_types.idl index a86c601994..13b8ade41c 100644 --- a/tools/libs/light/libxl_types.idl +++ b/tools/libs/light/libxl_types.idl @@ -284,6 +284,12 @@ libxl_virtio_transport = Enumeration("virtio_transport", [ (2, "PCI"), ]) +libxl_virtio_backend = Enumeration("virtio_backend", [ + (0, "UNKNOWN"), + (1, "QEMU"), + (2, "STANDALONE"), + ]) + libxl_passthrough = Enumeration("passthrough", [ (0, "default"), (1, "disabled"), @@ -778,6 +784,7 @@ libxl_device_vkb = Struct("device_vkb", [ libxl_device_virtio = Struct("device_virtio", [ ("backend_domid", libxl_domid), ("backend_domname", string), + ("backend_type", libxl_virtio_backend), ("type", string), ("u", KeyedUnion(None, libxl_virtio_transport, "transport", [("unknown", None), diff --git a/tools/libs/light/libxl_virtio.c b/tools/libs/light/libxl_virtio.c index 8062423c75..339a2006f0 100644 --- a/tools/libs/light/libxl_virtio.c +++ b/tools/libs/light/libxl_virtio.c @@ -32,9 +32,20 @@ static int libxl__device_virtio_setdefault(libxl__gc *gc, uint32_t domid, libxl_defbool_setdefault(&virtio->grant_usage, virtio->backend_domid != LIBXL_TOOLSTACK_DOMID); + if (virtio->backend_type == LIBXL_VIRTIO_BACKEND_UNKNOWN) + virtio->backend_type = LIBXL_VIRTIO_BACKEND_QEMU; + return 0; } +static int libxl__device_virtio_dm_needed(void *e, unsigned domid) +{ + libxl_device_virtio *elem = e; + + return elem->backend_type == LIBXL_VIRTIO_BACKEND_QEMU && + elem->backend_domid == domid; +} + static int libxl__device_from_virtio(libxl__gc *gc, uint32_t domid, libxl_device_virtio *virtio, libxl__device *device) @@ -55,7 +66,8 @@ static int libxl__set_xenstore_virtio(libxl__gc *gc, uint32_t domid, flexarray_t *back, flexarray_t *front, flexarray_t *ro_front) { - const char *transport = libxl_virtio_transport_to_string(virtio->transport); + const char *transport = libxl_virtio_transport_to_string(virtio->transport), + *backend = libxl_virtio_backend_to_string(virtio->backend_type); if (virtio->transport == LIBXL_VIRTIO_TRANSPORT_MMIO) { flexarray_append_pair(back, "irq", GCSPRINTF("%u", virtio->u.mmio.irq)); @@ -74,6 +86,7 @@ static int libxl__set_xenstore_virtio(libxl__gc *gc, uint32_t domid, } flexarray_append_pair(back, "type", GCSPRINTF("%s", virtio->type)); flexarray_append_pair(back, "transport", GCSPRINTF("%s", transport)); + flexarray_append_pair(back, "backend_type", GCSPRINTF("%s", backend)); flexarray_append_pair(back, "grant_usage", libxl_defbool_val(virtio->grant_usage) ? "1" : "0"); @@ -166,6 +179,19 @@ static int libxl__virtio_from_xenstore(libxl__gc *gc, const char *libxl_path, } } + tmp = NULL; + rc = libxl__xs_read_checked(gc, XBT_NULL, + GCSPRINTF("%s/backend_type", be_path), &tmp); + if (rc) goto out; + + if (tmp) { + rc = libxl_virtio_backend_from_string(tmp, &virtio->backend_type); + if (rc) { + LOG(ERROR, "Unable to parse xenstore node %s/backend_type", be_path); + goto out; + } + } + tmp = NULL; rc = libxl__xs_read_checked(gc, XBT_NULL, GCSPRINTF("%s/grant_usage", be_path), &tmp); @@ -200,6 +226,7 @@ static LIBXL_DEFINE_UPDATE_DEVID(virtio) #define libxl_device_virtio_compare NULL DEFINE_DEVICE_TYPE_STRUCT(virtio, VIRTIO, virtios, + .dm_needed = libxl__device_virtio_dm_needed, .set_xenstore_config = (device_set_xenstore_config_fn_t) libxl__set_xenstore_virtio, .from_xenstore = (device_from_xenstore_fn_t)libxl__virtio_from_xenstore, diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c index 4544ce2307..234cef5f7e 100644 --- a/tools/xl/xl_parse.c +++ b/tools/xl/xl_parse.c @@ -1215,6 +1215,9 @@ static int parse_virtio_config(libxl_device_virtio *virtio, char *token) } else if (MATCH_OPTION("transport", token, oparg)) { rc = libxl_virtio_transport_from_string(oparg, &virtio->transport); if (rc) return rc; + } else if (MATCH_OPTION("backend_type", token, oparg)) { + rc = libxl_virtio_backend_from_string(oparg, &virtio->backend_type); + if (rc) return rc; } else if (MATCH_OPTION("grant_usage", token, oparg)) { libxl_defbool_set(&virtio->grant_usage, strtoul(oparg, NULL, 0)); } else if (MATCH_OPTION("bdf", token, oparg)) { -- 2.25.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |