[libvirt] [PATCH v4 06/11] Convert QMP strings into QEMU capability bits

Daniel P. Berrange berrange at redhat.com
Thu Apr 11 15:38:04 UTC 2013


On Fri, Apr 05, 2013 at 10:05:57AM -0400, Stefan Berger wrote:
> Signed-off-by: Stefan Berger <stefanb at linux.vnet.ibm.com>
> Reviewed-by: Corey Bryant <coreyb at linux.vnet.ibm.com>
> Tested-by: Corey Bryant <coreyb at linux.vnet.ibm.com>
> 
> ---
>  src/qemu/qemu_capabilities.c |   56 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> Index: libvirt/src/qemu/qemu_capabilities.c
> ===================================================================
> --- libvirt.orig/src/qemu/qemu_capabilities.c
> +++ libvirt/src/qemu/qemu_capabilities.c
> @@ -38,6 +38,7 @@
>  #include "virbitmap.h"
>  #include "virnodesuspend.h"
>  #include "qemu_monitor.h"
> +#include "virstring.h"
>  
>  #include <fcntl.h>
>  #include <sys/stat.h>
> @@ -2115,6 +2116,59 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEM
>  
>  
>  static int
> +virQEMUCapsProbeQMPTPM(virQEMUCapsPtr qemuCaps,
> +                       qemuMonitorPtr mon)
> +{
> +    int nentries, i;
> +    char **entries = NULL;
> +    struct typeToCaps {
> +        int type;
> +        enum virQEMUCapsFlags caps;
> +    };
> +    const struct typeToCaps tpmTypesToCaps[] = {
> +        {
> +            .type = VIR_DOMAIN_TPM_TYPE_PASSTHROUGH,
> +            .caps = QEMU_CAPS_DEVICE_TPM_PASSTHROUGH,
> +        },
> +    };
> +    const struct typeToCaps tpmModelsToCaps[] = {
> +        {
> +            .type = VIR_DOMAIN_TPM_MODEL_TIS,
> +            .caps = QEMU_CAPS_DEVICE_TPM_TIS,
> +        },
> +    };

Nit-picking, I'd move these 2 outside the method and make them
static, as we have for other data tables in this file.


> +
> +    if ((nentries = qemuMonitorGetTPMModels(mon, &entries)) < 0)
> +        return -1;
> +
> +    if (nentries > 0) {
> +        for (i = 0; i < ARRAY_CARDINALITY(tpmModelsToCaps); i++) {
> +            const char *needle = virDomainTPMModelTypeToString(
> +                tpmModelsToCaps[i].type);
> +            if (virStringArrayHasString(entries, needle))
> +                virQEMUCapsSet(qemuCaps, tpmModelsToCaps[i].caps);
> +        }
> +    }
> +    virStringFreeList(entries);
> +
> +    if ((nentries = qemuMonitorGetTPMTypes(mon, &entries)) < 0)
> +        return -1;
> +
> +    if (nentries > 0) {
> +        for (i = 0; i < ARRAY_CARDINALITY(tpmTypesToCaps); i++) {
> +            const char *needle = virDomainTPMBackendTypeToString(
> +                tpmTypesToCaps[i].type);
> +            if (virStringArrayHasString(entries, needle))
> +                virQEMUCapsSet(qemuCaps, tpmTypesToCaps[i].caps);
> +        }
> +    }
> +    virStringFreeList(entries);
> +
> +    return 0;
> +}
> +
> +
> +static int
>  virQEMUCapsProbeQMPKVMState(virQEMUCapsPtr qemuCaps,
>                              qemuMonitorPtr mon)
>  {
> @@ -2467,6 +2521,8 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCa
>          goto cleanup;
>      if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0)
>          goto cleanup;
> +    if (virQEMUCapsProbeQMPTPM(qemuCaps, mon) < 0)
> +        goto cleanup;
>  
>      ret = 0;

ACK regardless


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