[libvirt] [PATCH v2 1/5] cpu_models: add new public API

Daniel P. Berrange berrange at redhat.com
Tue Sep 10 14:38:41 UTC 2013


On Sat, Sep 07, 2013 at 01:11:22AM +0200, Giuseppe Scrivano wrote:
> The new function virConnectGetCPUModelNames allows to retrieve the list
> of CPU models known by the hypervisor for a specific architecture.
> 
> Signed-off-by: Giuseppe Scrivano <gscrivan at redhat.com>
> ---
>  include/libvirt/libvirt.h.in | 18 +++++++++++++
>  python/generator.py          |  1 +
>  src/cpu/cpu.c                | 64 ++++++++++++++++++++++++++++++++++++++++++++
>  src/cpu/cpu.h                |  3 +++
>  src/driver.h                 |  7 +++++
>  src/libvirt.c                | 47 ++++++++++++++++++++++++++++++++
>  src/libvirt_private.syms     |  1 +
>  src/libvirt_public.syms      |  5 ++++
>  tools/virsh-host.c           | 48 +++++++++++++++++++++++++++++++++
>  tools/virsh.pod              |  5 ++++

It is preferrable to have virsh changes separate from the public API
addition. Likewise I'd suggest th src/cpu/ changes be a separate patch.

> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index a47e33c..43fb738 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -4006,6 +4006,24 @@ int virConnectCompareCPU(virConnectPtr conn,
>                           const char *xmlDesc,
>                           unsigned int flags);
>  
> +/**
> + * virConnectGetCPUModelNames:
> + *
> + * @conn: virConnect connection
> + * @arch: Architecture
> + * @models: NULL terminated array of the CPU models supported for the specified
> + * architecture.  Each element and the array itself must be freed by the caller
> + * with free.
> + * @flags: extra flags; not used yet, so callers should always pass 0.
> + *
> + * Get the list of supported CPU models for a specific architecture.
> + *
> + * Returns -1 on error, 0 on success.

I'd suggest

  Returns -1 on error,  number of elements in @models on success

> + */
> +int virConnectGetCPUModelNames(virConnectPtr conn,
> +                               const char *arch,
> +                               char ***models,
> +                               unsigned int flags);


> +int
> +cpuGetModels(const char *arch, char ***models)
> +{
> +    struct cpuGetModelsData data;
> +
> +    *models = data.data = NULL;
> +    data.len = 1;
> +
> +    if (VIR_ALLOC_N(data.data, data.len) < 0)
> +        goto error;
> +
> +    if (cpuGetArchModels(arch, &data) < 0)
> +        goto error;
> +
> +    *models = data.data;
> +    return 0;
> +
> +error:
> +    if (data.data) {
> +        char **it;
> +        for (it = data.data; *it; it++)
> +            VIR_FREE(*it);
> +        VIR_FREE(data.data);

virFreeStringList(data.data);  should do the trick.


>  /**
> + * virConnectGetCPUModelNames:
> + *
> + * @conn: virConnect connection
> + * @arch: Architecture
> + * @models: NULL terminated array of the CPU models supported for the specified
> + * architecture.  Each element and the array itself must be freed by the caller
> + * with free.
> + * @flags: extra flags; not used yet, so callers should always pass 0.
> + *
> + * Get the list of supported CPU models for a specific architecture.
> + *
> + * Returns -1 on error, 0 on success.
> + */
> +int
> +virConnectGetCPUModelNames(virConnectPtr conn, const char *arch, char ***models,
> +                           unsigned int flags)
> +{
> +    VIR_DEBUG("conn=%p, arch=%s, flags=%x", conn, arch, flags);
> +    virResetLastError();
> +
> +    if (!VIR_IS_CONNECT(conn)) {
> +        virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
> +        virDispatchError(NULL);
> +        return -1;
> +    }
> +
> +    if (arch == NULL) {
> +        virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> +        goto error;
> +    }

This allows access to this API from readonly connections. I think this is ok,
but just wanted to mention it explicitly.

> +
> +    if (conn->driver->connectGetCPUModelNames) {
> +        if (conn->driver->connectGetCPUModelNames(conn, arch, models, flags) < 0)
> +            goto error;
> +
> +        return 0;
> +    }
> +
> +    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +error:
> +    virDispatchError(conn);
> +    return -1;
> +}
> +
> +
> +/**
>   * virConnectBaselineCPU:
>   *
>   * @conn: virConnect connection


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list