From e6b36736a81c5e90c92bfc6f25d641d7048d5b7b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 12 Nov 2015 16:45:12 +0100 Subject: [PATCH] qemu: Add helper to retrieve vCPU pid Instead of directly accessing the array add a helper to do this. --- src/qemu/qemu_cgroup.c | 3 ++- src/qemu/qemu_domain.c | 20 ++++++++++++++++++++ src/qemu/qemu_domain.h | 1 + src/qemu/qemu_driver.c | 7 ++++--- src/qemu/qemu_process.c | 5 ++--- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 56b2bc41da..d5647bc707 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -1043,7 +1043,8 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm) goto cleanup; /* move the thread for vcpu to sub dir */ - if (virCgroupAddTask(cgroup_vcpu, priv->vcpupids[i]) < 0) + if (virCgroupAddTask(cgroup_vcpu, + qemuDomainGetVcpuPid(vm, i)) < 0) goto cleanup; if (period || quota) { diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 018f6f6bdb..6f19d49f4f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4131,3 +4131,23 @@ qemuDomainHasVcpuPids(virDomainObjPtr vm) return priv->nvcpupids > 0; } + + +/** + * qemuDomainGetVcpuPid: + * @vm: domain object + * @vcpu: cpu id + * + * Returns the vCPU pid. If @vcpu is offline or out of range 0 is returned. + */ +pid_t +qemuDomainGetVcpuPid(virDomainObjPtr vm, + unsigned int vcpu) +{ + qemuDomainObjPrivatePtr priv = vm->privateData; + + if (vcpu >= priv->nvcpupids) + return 0; + + return priv->vcpupids[vcpu]; +} diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 5e2b69957b..916d5d3ff5 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -506,5 +506,6 @@ int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def, const virDomainMemoryDef *mem); bool qemuDomainHasVcpuPids(virDomainObjPtr vm); +pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpu); #endif /* __QEMU_DOMAIN_H__ */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3b3761a7a0..14a325a012 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1449,7 +1449,7 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo, &(info[i].cpu), NULL, vm->pid, - priv->vcpupids[i]) < 0) { + qemuDomainGetVcpuPid(vm, i)) < 0) { virReportSystemError(errno, "%s", _("cannot get vCPU placement & pCPU time")); return -1; @@ -1462,7 +1462,7 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo, unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, v); virBitmapPtr map = NULL; - if (!(map = virProcessGetAffinity(priv->vcpupids[v]))) + if (!(map = virProcessGetAffinity(qemuDomainGetVcpuPid(vm, v)))) return -1; virBitmapToDataBuf(map, cpumap, maplen); @@ -5156,7 +5156,8 @@ qemuDomainPinVcpuFlags(virDomainPtr dom, goto endjob; } } else { - if (virProcessSetAffinity(priv->vcpupids[vcpu], pcpumap) < 0) { + if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, vcpu), + pcpumap) < 0) { virReportError(VIR_ERR_SYSTEM_ERROR, _("failed to set cpu affinity for vcpu %d"), vcpu); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index c59e1b4d4b..915caf99c6 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2234,7 +2234,6 @@ qemuProcessSetLinkStates(virQEMUDriverPtr driver, static int qemuProcessSetVcpuAffinities(virDomainObjPtr vm) { - qemuDomainObjPrivatePtr priv = vm->privateData; virDomainDefPtr def = vm->def; virDomainPinDefPtr pininfo; int n; @@ -2267,7 +2266,7 @@ qemuProcessSetVcpuAffinities(virDomainObjPtr vm) n))) continue; - if (virProcessSetAffinity(priv->vcpupids[n], + if (virProcessSetAffinity(qemuDomainGetVcpuPid(vm, n), pininfo->cpumask) < 0) { goto cleanup; } @@ -2355,7 +2354,7 @@ qemuProcessSetSchedulers(virDomainObjPtr vm) size_t i = 0; for (i = 0; i < priv->nvcpupids; i++) { - if (qemuProcessSetSchedParams(i, priv->vcpupids[i], + if (qemuProcessSetSchedParams(i, qemuDomainGetVcpuPid(vm, i), vm->def->cputune.nvcpusched, vm->def->cputune.vcpusched) < 0) return -1; -- GitLab