[PATCH v2 1/2] hyperv: XML parsing of storage volumes

Daniel P. Berrangé berrange at redhat.com
Mon Nov 23 15:22:00 UTC 2020


On Thu, Nov 19, 2020 at 07:33:29PM -0500, Matt Coleman wrote:
> dumpxml can now serialize:
> * floppy drives
> * file-backed and device-backed disk drives
> * images mounted to virtual CD/DVD drives
> * IDE and SCSI controllers
> 
> Co-authored-by: Sri Ramanujam <sramanujam at datto.com>
> Signed-off-by: Matt Coleman <matt at datto.com>
> ---
>  src/hyperv/hyperv_driver.c            | 419 +++++++++++++++++++++++++-
>  src/hyperv/hyperv_driver.h            |   3 +
>  src/hyperv/hyperv_private.h           |   2 +
>  src/hyperv/hyperv_wmi.c               |  45 +++
>  src/hyperv/hyperv_wmi.h               |   8 +
>  src/hyperv/hyperv_wmi_classes.h       |  19 ++
>  src/hyperv/hyperv_wmi_generator.input | 134 ++++++++
>  7 files changed, 629 insertions(+), 1 deletion(-)
> 
> diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
> index 40739595ac..326c0169e7 100644
> --- a/src/hyperv/hyperv_driver.c
> +++ b/src/hyperv/hyperv_driver.c
> @@ -293,6 +293,396 @@ hypervCapsInit(hypervPrivate *priv)
>      return NULL;
>  }
>  
> +/*
> + * Virtual device functions
> + */
> +static int
> +hypervGetDeviceParentRasdFromDeviceId(const char *parentDeviceId,
> +                                      Msvm_ResourceAllocationSettingData *list,
> +                                      Msvm_ResourceAllocationSettingData **out)
> +{
> +    Msvm_ResourceAllocationSettingData *entry = list;
> +    *out = NULL;
> +
> +    while (entry) {
> +        g_autofree char *escapedDeviceId = virStringReplace(entry->data->InstanceID, "\\", "\\\\");
> +        g_autofree char *expectedSuffix = g_strdup_printf("%s\"", escapedDeviceId);
> +
> +        if (g_str_has_suffix(parentDeviceId, expectedSuffix)) {
> +            *out = entry;
> +            break;
> +        }
> +
> +        entry = entry->next;
> +    }
> +
> +    if (*out)
> +        return 0;
> +

I think you need a virReportError here, so the caller gets some
error message

> +    return -1;
> +}
> +




> @@ -1324,7 +1728,18 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
>  
>      def->os.type = VIR_DOMAIN_OSTYPE_HVM;
>  
> -    /* FIXME: devices section is totally missing */
> +    /* Allocate space for all potential devices */
> +
> +    /* 256 scsi drives + 8 ide drives */

s/8/4/

> +    def->disks = g_new0(virDomainDiskDefPtr, 264);

s/264/260/

Or perhaps use the HYPERV_MAX_SCSI_CONTROLLERS / HYPERV_MAX_IDE_CHANNELS
constants here

> +    def->ndisks = 0;
> +
> +    /* 1 ide & 4 scsi controllers */
> +    def->controllers = g_new0(virDomainControllerDefPtr, 5);
> +    def->ncontrollers = 0;




> diff --git a/src/hyperv/hyperv_driver.h b/src/hyperv/hyperv_driver.h
> index 8099b5714b..3a71a2943e 100644
> --- a/src/hyperv/hyperv_driver.h
> +++ b/src/hyperv/hyperv_driver.h
> @@ -22,4 +22,7 @@
>  
>  #pragma once
>  
> +#define HYPERV_MAX_SCSI_CONTROLLERS 4
> +#define HYPERV_MAX_IDE_CHANNELS 2

s/2/1/


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list