Use the default or auto cpuset if they are provided for IOThreads. --- src/qemu/qemu_cgroup.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index bc7632f..be02ede 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -1255,21 +1255,26 @@ qemuSetupCgroupForIOThreads(virDomainObjPtr vm) /* Set iothreadpin in cgroup if iothreadpin xml is provided */ if (virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) { - /* find the right CPU to pin, otherwise - * qemuSetupCgroupIOThreadsPin will fail. */ - for (j = 0; j < def->cputune.niothreadspin; j++) { - /* IOThreads are numbered/named 1..n */ - if (def->cputune.iothreadspin[j]->id != i + 1) - continue; + virBitmapPtr cpumask = NULL; - if (qemuSetupCgroupIOThreadsPin(cgroup_iothread, - def->cputune.iothreadspin, - def->cputune.niothreadspin, - i + 1) < 0) - goto cleanup; + /* default cpu masks */ + if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) + cpumask = priv->autoCpuset; + else + cpumask = def->cpumask; - break; + /* specific cpu mask */ + for (j = 0; j < def->cputune.niothreadspin; j++) { + /* IOThreads are numbered/named 1..n */ + if (def->cputune.iothreadspin[j]->id == i + 1) { + cpumask = def->cputune.iothreadspin[j]->cpumask; + break; + } } + + if (cpumask && + qemuSetupCgroupEmulatorPin(cgroup_iothread, cpumask) < 0) + goto cleanup; } virCgroupFree(&cgroup_iothread); -- 2.2.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list