Export qemuSetupInputCgroup and introduce qemuTeardownInputCgroup for hotunplug. --- src/qemu/qemu_cgroup.c | 25 ++++++++++++++++++++++++- src/qemu/qemu_cgroup.h | 4 ++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 0f75e22f9..19252ea23 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -246,7 +246,7 @@ qemuSetupTPMCgroup(virDomainObjPtr vm) } -static int +int qemuSetupInputCgroup(virDomainObjPtr vm, virDomainInputDefPtr dev) { @@ -270,6 +270,29 @@ qemuSetupInputCgroup(virDomainObjPtr vm, 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) { diff --git a/src/qemu/qemu_cgroup.h b/src/qemu/qemu_cgroup.h index 3fc158361..3b8ff6055 100644 --- a/src/qemu/qemu_cgroup.h +++ b/src/qemu/qemu_cgroup.h @@ -37,6 +37,10 @@ int qemuSetupDiskCgroup(virDomainObjPtr vm, 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; -- 2.13.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list