[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