}
-static int
+int
qemuSetupInputCgroup(virDomainObjPtr vm,
virDomainInputDefPtr dev)
{
}
+int
+qemuTeardownInputCgroup(virDomainObjPtr vm,
+ virDomainInputDefPtr dev)
+{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+ int ret = 0;
+
+ if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICES))
+ return 0;
+
+ switch (dev->type) {
+ case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH:
+ VIR_DEBUG("Process path '%s' for input device", dev->source.evdev);
+ ret = virCgroupDenyDevicePath(priv->cgroup, dev->source.evdev,
+ VIR_CGROUP_DEVICE_RWM, false);
+ virDomainAuditCgroupPath(vm, priv->cgroup, "deny", dev->source.evdev, "rwm", ret == 0);
+ break;
+ }
+
+ return ret;
+}
+
+
int
qemuSetupHostdevCgroup(virDomainObjPtr vm,
virDomainHostdevDefPtr dev)
virDomainDiskDefPtr disk);
int qemuTeardownDiskCgroup(virDomainObjPtr vm,
virDomainDiskDefPtr disk);
+int qemuSetupInputCgroup(virDomainObjPtr vm,
+ virDomainInputDefPtr dev);
+int qemuTeardownInputCgroup(virDomainObjPtr vm,
+ virDomainInputDefPtr dev);
int qemuSetupHostdevCgroup(virDomainObjPtr vm,
virDomainHostdevDefPtr dev)
ATTRIBUTE_RETURN_CHECK;