]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu: Add helper to retrieve vCPU pid
authorPeter Krempa <pkrempa@redhat.com>
Thu, 12 Nov 2015 15:45:12 +0000 (16:45 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 9 Dec 2015 13:57:12 +0000 (14:57 +0100)
Instead of directly accessing the array add a helper to do this.

src/qemu/qemu_cgroup.c
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_driver.c
src/qemu/qemu_process.c

index 56b2bc41da0c88b75d0793de223d10b18c539a56..d5647bc70798d7dcec20002be7532c61760e3d80 100644 (file)
@@ -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) {
index 018f6f6bdbb292956d6e4b9c0514bd085e298427..6f19d49f4f09317abdf51f39fcd460f325a7a93b 100644 (file)
@@ -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];
+}
index 5e2b69957bf28b544b7c2a88de473a090a1a236d..916d5d3ff5e7cfaa09a1dc8bfed7a15260318e77 100644 (file)
@@ -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__ */
index 3b3761a7a04803b4616553a28689e94f3d6209ca..14a325a01268bfbe4d0b0bc8f92bf3be2501b15b 100644 (file)
@@ -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);
index c59e1b4d4b971066690cd70187baca8ee2feb3f6..915caf99c623aff531b6baa24a3f5d23698d5df6 100644 (file)
@@ -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;