]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu-dbus: register DBus bus to the VM cgroup
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Wed, 8 Apr 2020 17:23:50 +0000 (19:23 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 22 Apr 2020 07:58:10 +0000 (09:58 +0200)
External devices are started before cgroup is created. Add the DBus
daemon to the VM cgroup with the rest of the external devices.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_dbus.c
src/qemu/qemu_dbus.h
src/qemu/qemu_extdevice.c

index 02dc3ebf07261f1c4f06603d3a0e2f9c61a50bf8..53f6c459863a8c1a13aa64af36339b4859b8a4e8 100644 (file)
@@ -156,6 +156,30 @@ qemuDBusStop(virQEMUDriverPtr driver,
 }
 
 
+int
+qemuDBusSetupCgroup(virQEMUDriverPtr driver,
+                    virDomainObjPtr vm)
+{
+    g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    g_autofree char *shortName = NULL;
+    g_autofree char *pidfile = NULL;
+    pid_t cpid = -1;
+
+    if (!priv->dbusDaemonRunning)
+        return 0;
+
+    if (!(shortName = virDomainDefGetShortName(vm->def)))
+        return -1;
+    pidfile = qemuDBusCreatePidFilename(cfg, shortName);
+    if (virPidFileReadPath(pidfile, &cpid) < 0) {
+        VIR_WARN("Unable to get DBus PID");
+        return -1;
+    }
+
+    return virCgroupAddProcess(priv->cgroup, cpid);
+}
+
 int
 qemuDBusStart(virQEMUDriverPtr driver,
               virDomainObjPtr vm)
index a96f19ac0dcbdd5a716dca22dec7d917c6d328ac..474eb1058b70e158229555338aaf4d648e74e91d 100644 (file)
@@ -35,3 +35,6 @@ void qemuDBusStop(virQEMUDriverPtr driver,
 int qemuDBusVMStateAdd(virDomainObjPtr vm, const char *id);
 
 void qemuDBusVMStateRemove(virDomainObjPtr vm, const char *id);
+
+int qemuDBusSetupCgroup(virQEMUDriverPtr driver,
+                        virDomainObjPtr vm);
index dae35243073418cd3c472d731e4da5ca418ee282..20962727616b24e749ca2fbf371bd01d66c1e1a5 100644 (file)
@@ -23,6 +23,7 @@
 #include "qemu_command.h"
 #include "qemu_extdevice.h"
 #include "qemu_vhost_user_gpu.h"
+#include "qemu_dbus.h"
 #include "qemu_domain.h"
 #include "qemu_tpm.h"
 #include "qemu_slirp.h"
@@ -276,6 +277,9 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
     virDomainDefPtr def = vm->def;
     size_t i;
 
+    if (qemuDBusSetupCgroup(driver, vm) < 0)
+        return -1;
+
     for (i = 0; i < def->nvideos; i++) {
         virDomainVideoDefPtr video = def->videos[i];