diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5b6d34be67c679d86348b3dbf6de7ae0e1a3e5a5..8e7404da64cfd2dcad98ed1c6c90818ef02a467c 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 a2cd155c33a1cc092c931f1f980f30c35f794d09..aae322473b4d7820d2f800bd3f2d91683eec9245 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 85b800da3d842b8c5bf803cf6f9a16c03e7a239d..189d5c89801ad14a5ae6c8ca580bb610b691b8a3 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; }