]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
slirp: add helper to VM cgroup
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Wed, 8 Apr 2020 17:23:47 +0000 (19:23 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 22 Apr 2020 07:58:10 +0000 (09:58 +0200)
The slirp helper process should be associated with the VM cgroup, like
other helpers.

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

index 5a31b4d66e0dd698bfd01a7074ab639e37cb5a2c..dae35243073418cd3c472d731e4da5ca418ee282 100644 (file)
@@ -284,6 +284,14 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
             return -1;
     }
 
+    for (i = 0; i < def->nnets; i++) {
+        virDomainNetDefPtr net = def->nets[i];
+        qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
+
+        if (slirp && qemuSlirpSetupCgroup(slirp, cgroup) < 0)
+            return -1;
+    }
+
     if (def->tpm &&
         qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
         return -1;
index 815156da5db388500a8495debe78393ede08c1bf..3efc34bcf0e3da902fbcaef9e6bbb904effbbe74 100644 (file)
@@ -242,6 +242,14 @@ qemuSlirpStop(qemuSlirpPtr slirp,
 }
 
 
+int
+qemuSlirpSetupCgroup(qemuSlirpPtr slirp,
+                     virCgroupPtr cgroup)
+{
+    return virCgroupAddProcess(cgroup, slirp->pid);
+}
+
+
 int
 qemuSlirpStart(qemuSlirpPtr slirp,
                virDomainObjPtr vm,
@@ -249,6 +257,7 @@ qemuSlirpStart(qemuSlirpPtr slirp,
                virDomainNetDefPtr net,
                bool incoming)
 {
+    qemuDomainObjPrivatePtr priv = vm->privateData;
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
     g_autoptr(virCommand) cmd = NULL;
     g_autofree char *pidfile = NULL;
@@ -352,6 +361,10 @@ qemuSlirpStart(qemuSlirpPtr slirp,
     }
 
     slirp->pid = pid;
+
+    if (priv->cgroup && qemuSlirpSetupCgroup(slirp, priv->cgroup) < 0)
+        goto error;
+
     return 0;
 
  error:
@@ -361,5 +374,6 @@ qemuSlirpStart(qemuSlirpPtr slirp,
         unlink(pidfile);
     if (killDBusDaemon)
         qemuDBusStop(driver, vm);
+    slirp->pid = 0;
     return -1;
 }
index 5bf9596053fdcd45a9e8fb45df32ac25d6cf6633..e1db9088146bfb6c030ce0ea93e15cf49d3c1db5 100644 (file)
@@ -75,4 +75,7 @@ void qemuSlirpStop(qemuSlirpPtr slirp,
 
 int qemuSlirpGetFD(qemuSlirpPtr slirp);
 
+int qemuSlirpSetupCgroup(qemuSlirpPtr slirp,
+                         virCgroupPtr cgroup);
+
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuSlirp, qemuSlirpFree);