Re: [PATCH v2 01/23] qemu: monitor: Return structures from qemuMonitorGetCPUInfo

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





At 08/19/2016 10:38 PM, Peter Krempa wrote:
The function will gradually add more returned data. Return a struct for
every vCPU containing the data.
 /**
  * qemuMonitorGetCPUInfo:
  * @mon: monitor
- * @pids: returned array of thread ids corresponding to the vCPUs
+ * @cpus: pointer filled by array of qemuMonitorCPUInfo structures

s/@cpus/@vcpus

+ * @maxvcpus: total possible number of vcpus
+ *
+ * Detects VCPU information. If qemu doesn't support or fails reporting
+ * information this function will return success as other parts of libvirt
+ * are able to cope with that.
  *
- * Detects the vCPU thread ids. Returns count of detected vCPUs on success,
- * 0 if qemu didn't report thread ids (does not report libvirt error),
- * -1 on error (reports libvirt error).
+ * Returns 0 on success (including if qemu didn't report any data) and
+ *  -1 on error (reports libvirt error).
  */
 int
 qemuMonitorGetCPUInfo(qemuMonitorPtr mon,
-                      int **pids)
+                      qemuMonitorCPUInfoPtr *vcpus,
+                      size_t maxvcpus)
 {
+    qemuMonitorCPUInfoPtr info = NULL;
+    int *pids = NULL;
+    size_t i;
+    int ret = -1;
+    int rc;
+
     QEMU_CHECK_MONITOR(mon);

+    if (VIR_ALLOC_N(info, maxvcpus) < 0)
+        return -1;
+
     if (mon->json)
-        return qemuMonitorJSONQueryCPUs(mon, pids);
+        rc = qemuMonitorJSONQueryCPUs(mon, &pids);
     else
-        return qemuMonitorTextQueryCPUs(mon, pids);
+        rc = qemuMonitorTextQueryCPUs(mon, &pids);
+
+    if (rc < 0) {
+        virResetLastError();
+        VIR_STEAL_PTR(*vcpus, info);
+        ret = 0;
+        goto cleanup;
+    }
+
+    for (i = 0; i < rc; i++)
+        info[i].tid = pids[i];
+
+    VIR_STEAL_PTR(*vcpus, info);
+    ret = 0;
+
+ cleanup:
+    qemuMonitorCPUInfoFree(info, maxvcpus);
+    VIR_FREE(pids);
+    return ret;
 }


diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 591d3ed..3fa993f 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -390,8 +390,19 @@ int qemuMonitorGetStatus(qemuMonitorPtr mon,
 int qemuMonitorSystemReset(qemuMonitorPtr mon);
 int qemuMonitorSystemPowerdown(qemuMonitorPtr mon);

+
+struct _qemuMonitorCPUInfo {
+    pid_t tid;
+};
+typedef struct _qemuMonitorCPUInfo qemuMonitorCPUInfo;
+typedef qemuMonitorCPUInfo *qemuMonitorCPUInfoPtr;
+
+void qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr list,
+                            size_t nitems);
 int qemuMonitorGetCPUInfo(qemuMonitorPtr mon,
-                          int **pids);
+                          qemuMonitorCPUInfoPtr *vcpus,
+                          size_t maxvcpus);
+
 int qemuMonitorGetVirtType(qemuMonitorPtr mon,
                            virDomainVirtType *virtType);
 int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,



--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]