Some refactoring for virDomainChrSourceDef type of devices so
we can use common code.
Signed-off-by: Stefan Berger <stefanb(a)linux.vnet.ibm.com>
---
src/qemu/qemu_cgroup.c | 53 +++++++++++++++++++++++++++++++++++++++----------
1 file changed, 43 insertions(+), 10 deletions(-)
Index: libvirt/src/qemu/qemu_cgroup.c
===================================================================
--- libvirt.orig/src/qemu/qemu_cgroup.c
+++ libvirt/src/qemu/qemu_cgroup.c
@@ -144,34 +144,62 @@ int qemuTeardownDiskCgroup(virDomainObjP
&data);
}
-
static int
-qemuSetupChardevCgroup(virDomainDefPtr def,
- virDomainChrDefPtr dev,
- void *opaque)
+qemuSetupChrSourceCgroup(virDomainDefPtr def,
+ virDomainChrSourceDefPtr dev,
+ qemuCgroupData *data)
{
- qemuCgroupData *data = opaque;
int rc;
- if (dev->source.type != VIR_DOMAIN_CHR_TYPE_DEV)
+ if (dev->type != VIR_DOMAIN_CHR_TYPE_DEV)
return 0;
+ VIR_DEBUG("Process path '%s' for device", dev->data.file.path);
- VIR_DEBUG("Process path '%s' for disk",
dev->source.data.file.path);
- rc = virCgroupAllowDevicePath(data->cgroup, dev->source.data.file.path,
+ rc = virCgroupAllowDevicePath(data->cgroup, dev->data.file.path,
VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupPath(data->vm, data->cgroup, "allow",
- dev->source.data.file.path, "rw", rc);
+ dev->data.file.path, "rw", rc);
if (rc < 0) {
virReportSystemError(-rc,
_("Unable to allow device %s for %s"),
- dev->source.data.file.path, def->name);
+ dev->data.file.path, def->name);
return -1;
}
return 0;
}
+static int
+qemuSetupChardevCgroup(virDomainDefPtr def,
+ virDomainChrDefPtr dev,
+ void *opaque)
+{
+ qemuCgroupData *data = opaque;
+
+ return qemuSetupChrSourceCgroup(def, &dev->source, data);
+}
+
+
+static int
+qemuSetupTPMCgroup(virDomainDefPtr def,
+ virDomainTPMDefPtr dev,
+ qemuCgroupData *data)
+{
+ int rc = 0;
+
+ switch (dev->type) {
+ case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
+ rc = qemuSetupChrSourceCgroup(def, &dev->data.passthrough.source,
+ data);
+ break;
+ case VIR_DOMAIN_TPM_TYPE_LAST:
+ break;
+ }
+
+ return rc;
+}
+
int qemuSetupHostUsbDeviceCgroup(virUSBDevicePtr dev ATTRIBUTE_UNUSED,
const char *path,
@@ -289,6 +317,11 @@ int qemuSetupCgroup(virQEMUDriverPtr dri
&data) < 0)
goto cleanup;
+ if (vm->def->tpm)
+ qemuSetupTPMCgroup(vm->def,
+ vm->def->tpm,
+ &data);
+
for (i = 0; i < vm->def->nhostdevs; i++) {
virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
virUSBDevicePtr usb;