From f9758109a766c565c4938795aee2fd9ad5fb7c5f Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Thu, 15 Jun 2017 08:34:55 +0200 Subject: [PATCH] qemu: introduce chardevStdioLogd to qemu private data In QEMU driver we can use virtlogd as stdio handler for source backend of char devices if current QEMU is new enough and it's enabled in qemu.conf. We should store this information while starting a guest because the config option may change while the guest is running. Signed-off-by: Pavel Hrdina Reviewed-by: John Ferlan --- src/qemu/qemu_domain.c | 6 ++++++ src/qemu/qemu_domain.h | 3 +++ src/qemu/qemu_process.c | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5b6d34be67..8e7404da64 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1885,6 +1885,9 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf, virCPUDefFormatBufFull(buf, priv->origCPU, NULL, false); + if (priv->chardevStdioLogd) + virBufferAddLit(buf, ""); + return 0; } @@ -2156,6 +2159,9 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, if (virCPUDefParseXML(ctxt, "./cpu", VIR_CPU_TYPE_GUEST, &priv->origCPU) < 0) goto error; + priv->chardevStdioLogd = virXPathBoolean("boolean(./chardevStdioLogd)", + ctxt) == 1; + return 0; error: diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index a2cd155c33..aae322473b 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -297,6 +297,9 @@ struct _qemuDomainObjPrivate { /* CPU def used to start the domain when it differs from the one actually * provided by QEMU. */ virCPUDefPtr origCPU; + + /* If true virtlogd is used as stdio handler for character devices. */ + bool chardevStdioLogd; }; # define QEMU_DOMAIN_PRIVATE(vm) \ diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 85b800da3d..189d5c8980 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5435,6 +5435,7 @@ qemuProcessPrepareDomain(virConnectPtr conn, size_t i; char *nodeset = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virCapsPtr caps; if (!(caps = virQEMUDriverGetCapabilities(driver, false))) @@ -5471,6 +5472,13 @@ qemuProcessPrepareDomain(virConnectPtr conn, } } + /* Whether we should use virtlogd as stdio handler for character + * devices source backend. */ + if (cfg->stdioLogD && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CHARDEV_FILE_APPEND)) { + priv->chardevStdioLogd = true; + } + /* * Normally PCI addresses are assigned in the virDomainCreate * or virDomainDefine methods. We might still need to assign @@ -5534,6 +5542,7 @@ qemuProcessPrepareDomain(virConnectPtr conn, cleanup: VIR_FREE(nodeset); virObjectUnref(caps); + virObjectUnref(cfg); return ret; } -- GitLab