!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET))
return 0;
- if (priv->nvcpupids == 0 || priv->vcpupids[0] == vm->pid) {
- /* If we don't know VCPU<->PID mapping or all vcpu runs in the same
- * thread, we cannot control each vcpu.
- */
+ /* If vCPU<->pid mapping is missing we can't do vCPU pinning */
+ if (!qemuDomainHasVcpuPids(vm))
return 0;
- }
if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 &&
mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT &&
size_t i, v;
qemuDomainObjPrivatePtr priv = vm->privateData;
- if (priv->vcpupids == NULL) {
+ if (!qemuDomainHasVcpuPids(vm)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("cpu affinity is not supported"));
return -1;
}
if (def) {
- if (priv->vcpupids == NULL) {
+ if (!qemuDomainHasVcpuPids(vm)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("cpu affinity is not supported"));
goto endjob;
if (period == 0 && quota == 0)
return 0;
- /* If we does not know VCPU<->PID mapping or all vcpu runs in the same
- * thread, we cannot control each vcpu. So we only modify cpu bandwidth
- * when each vcpu has a separated thread.
- */
- if (priv->nvcpupids != 0 && priv->vcpupids[0] != vm->pid) {
- for (i = 0; i < priv->nvcpupids; i++) {
- if (virCgroupNewThread(cgroup, VIR_CGROUP_THREAD_VCPU, i,
- false, &cgroup_vcpu) < 0)
- goto cleanup;
+ if (!qemuDomainHasVcpuPids(vm))
+ return 0;
- if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0)
- goto cleanup;
+ for (i = 0; i < priv->nvcpupids; i++) {
+ if (virCgroupNewThread(cgroup, VIR_CGROUP_THREAD_VCPU, i,
+ false, &cgroup_vcpu) < 0)
+ goto cleanup;
- virCgroupFree(&cgroup_vcpu);
- }
+ if (qemuSetupCgroupVcpuBW(cgroup_vcpu, period, quota) < 0)
+ goto cleanup;
+
+ virCgroupFree(&cgroup_vcpu);
}
return 0;
int ret = -1;
priv = vm->privateData;
- if (priv->nvcpupids == 0 || priv->vcpupids[0] == vm->pid) {
+ if (!qemuDomainHasVcpuPids(vm)) {
/* We do not create sub dir for each vcpu */
rc = qemuGetVcpuBWLive(priv->cgroup, period, quota);
if (rc < 0)
virDomainPinDefPtr pininfo;
int n;
int ret = -1;
- VIR_DEBUG("Setting affinity on CPUs nvcpupin=%zu nvcpus=%d nvcpupids=%d",
- def->cputune.nvcpupin, virDomainDefGetVcpus(def), priv->nvcpupids);
+ VIR_DEBUG("Setting affinity on CPUs nvcpupin=%zu nvcpus=%d hasVcpupids=%d",
+ def->cputune.nvcpupin, virDomainDefGetVcpus(def),
+ qemuDomainHasVcpuPids(vm));
if (!def->cputune.nvcpupin)
return 0;
- if (priv->vcpupids == NULL) {
+ if (!qemuDomainHasVcpuPids(vm)) {
/* If any CPU has custom affinity that differs from the
* VM default affinity, we must reject it
*/