[libvirt] [PATCH v2 01/23] qemu: monitor: Return structures from qemuMonitorGetCPUInfo
Dou Liyang
douly.fnst at cn.fujitsu.com
Mon Aug 22 07:11:56 UTC 2016
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,
>
More information about the libvir-list
mailing list