]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: introduce chardevStdioLogd to qemu private data
authorPavel Hrdina <phrdina@redhat.com>
Thu, 15 Jun 2017 06:34:55 +0000 (08:34 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Fri, 16 Jun 2017 13:52:11 +0000 (15:52 +0200)
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 <phrdina@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_process.c

index 5b6d34be67c679d86348b3dbf6de7ae0e1a3e5a5..8e7404da64cfd2dcad98ed1c6c90818ef02a467c 100644 (file)
@@ -1885,6 +1885,9 @@ qemuDomainObjPrivateXMLFormat(virBufferPtr buf,
 
     virCPUDefFormatBufFull(buf, priv->origCPU, NULL, false);
 
+    if (priv->chardevStdioLogd)
+        virBufferAddLit(buf, "<chardevStdioLogd/>");
+
     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:
index a2cd155c33a1cc092c931f1f980f30c35f794d09..aae322473b4d7820d2f800bd3f2d91683eec9245 100644 (file)
@@ -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)       \
index 85b800da3d842b8c5bf803cf6f9a16c03e7a239d..189d5c89801ad14a5ae6c8ca580bb610b691b8a3 100644 (file)
@@ -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;
 }