[libvirt] [PATCH 4/4] domaincaps: Expose NVRAM store file format capabilities

Laszlo Ersek lersek at redhat.com
Tue Jan 13 15:48:43 UTC 2015


comments below

On 01/13/15 14:41, Michal Privoznik wrote:
> It would be nice if we expose the capability of choosing the NVRAM
> store file format among with all the possibilities.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  docs/formatdomaincaps.html.in                           | 16 ++++++++++++++++
>  docs/schemas/domaincaps.rng                             | 13 +++++++++++++
>  src/conf/domain_capabilities.c                          | 17 +++++++++++++++++
>  src/conf/domain_capabilities.h                          |  1 +
>  src/qemu/qemu_capabilities.c                            |  7 +++++--
>  tests/domaincapsschemadata/domaincaps-full.xml          |  6 ++++++
>  tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml |  6 ++++++
>  tests/domaincapstest.c                                  |  1 +
>  8 files changed, 65 insertions(+), 2 deletions(-)
> 
> diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in
> index 850109f..05a67b8 100644
> --- a/docs/formatdomaincaps.html.in
> +++ b/docs/formatdomaincaps.html.in
> @@ -118,6 +118,12 @@
>          <value>no</value>
>        </enum>
>      </loader>
> +    <nvram supported='yes'>
> +      <enum name='format'>
> +        <value>raw</value>
> +        <value>qcow2</value>
> +      </enum>
> +    </nvram>
>    </os>
>    ...
>  <domainCapabilities>
> @@ -142,6 +148,16 @@
>        <loader/> element.</dd>
>      </dl>
>  
> +    <p>For the <code>nvram</code> element, the following can occur:</p>

s/occur/be listed/; I think. (May not be right for the capability docs.)

Also, mention <loader>.

> +
> +    <dl>
> +      <dt>format</dt>
> +      <dd>What formats of NVRAM file are supported. The default is
> +      <code>raw</code> which is delivered in the packages. However, in some
> +      distributions, the <code>qcow2</code> may be delivered too. This refers
> +      to <code>format</code> attribute of the <nvram/> element.</dd>
> +    </dl>
> +

I think the language about packages and distributions should be omitted.

>      <h3><a name="elementsDevices">Devices</a></h3>
>  
>      <p>
> diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng
> index 35d3745..e8a1e59 100644
> --- a/docs/schemas/domaincaps.rng
> +++ b/docs/schemas/domaincaps.rng
> @@ -54,6 +54,16 @@
>      </element>
>    </define>
>  
> +  <define name='nvram'>
> +    <element name='nvram'>
> +      <ref name='supported'/>
> +      <optional>
> +        <ref name='value'/>
> +      </optional>
> +      <ref name='enum'/>
> +    </element>
> +  </define>
> +
>    <define name='os'>
>      <element name='os'>
>        <interleave>
> @@ -61,6 +71,9 @@
>          <optional>
>            <ref name='loader'/>
>          </optional>
> +        <optional>
> +          <ref name='nvram'/>
> +        </optional>
>        </interleave>
>      </element>
>    </define>
> diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
> index 7c59912..d545fcc 100644
> --- a/src/conf/domain_capabilities.c
> +++ b/src/conf/domain_capabilities.c
> @@ -221,6 +221,22 @@ virDomainCapsLoaderFormat(virBufferPtr buf,
>  }
>  
>  static void
> +virDomainCapsNVRAMFormat(virBufferPtr buf,
> +                         virDomainCapsLoaderPtr nvram)
> +{
> +    /* Even though the type of @nvram would suggest naming it
> +     * differently than 'nvram' ('loader' for instance), keep in
> +     * mind that the FORMAT_PROLOGUE macro emits the variable
> +     * name into the XML where we want to see 'nvram'. Really. */
> +    FORMAT_PROLOGUE(nvram);
> +
> +    virDomainCapsEnumFormat(buf, &nvram->nvramFormat, "format",
> +                            virDomainLoaderNVRAMFormatTypeToString);
> +
> +    FORMAT_EPILOGUE(nvram);
> +}
> +
> +static void
>  virDomainCapsOSFormat(virBufferPtr buf,
>                        virDomainCapsOSPtr os)
>  {
> @@ -229,6 +245,7 @@ virDomainCapsOSFormat(virBufferPtr buf,
>      FORMAT_PROLOGUE(os);
>  
>      virDomainCapsLoaderFormat(buf, loader);
> +    virDomainCapsNVRAMFormat(buf, loader);
>  
>      FORMAT_EPILOGUE(os);
>  }
> diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
> index 597ac75..f878a67 100644
> --- a/src/conf/domain_capabilities.h
> +++ b/src/conf/domain_capabilities.h
> @@ -57,6 +57,7 @@ struct _virDomainCapsLoader {
>      virDomainCapsStringValues values;   /* Info about values for the element */
>      virDomainCapsEnum type;     /* Info about virDomainLoader */
>      virDomainCapsEnum readonly; /* Info about readonly:virTristateBool */
> +    virDomainCapsEnum nvramFormat;  /* Info about virDomainLoaderNVRAMFormat */
>  };
>  
>  typedef struct _virDomainCapsOS virDomainCapsOS;
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 13f3cd3..858ef8d 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -3706,10 +3706,13 @@ virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps,
>                               VIR_DOMAIN_LOADER_TYPE_ROM);
>  
>      if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE) &&
> -        virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_FORMAT))
> +        virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_FORMAT)) {
>          VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->type,
>                                   VIR_DOMAIN_LOADER_TYPE_PFLASH);
> -
> +        VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->nvramFormat,
> +                                 VIR_DOMAIN_LOADER_NVRAM_FORMAT_RAW,
> +                                 VIR_DOMAIN_LOADER_NVRAM_FORMAT_QCOW2);
> +    }
>  
>      if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_READONLY))
>          VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->readonly,
> diff --git a/tests/domaincapsschemadata/domaincaps-full.xml b/tests/domaincapsschemadata/domaincaps-full.xml
> index 96202bc..8a3902e 100644
> --- a/tests/domaincapsschemadata/domaincaps-full.xml
> +++ b/tests/domaincapsschemadata/domaincaps-full.xml
> @@ -18,6 +18,12 @@
>          <value>no</value>
>        </enum>
>      </loader>
> +    <nvram supported='yes'>
> +      <enum name='format'>
> +        <value>raw</value>
> +        <value>qcow2</value>
> +      </enum>
> +    </nvram>
>    </os>
>    <devices>
>      <disk supported='yes'>
> diff --git a/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml b/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> index 346ef65..4ba0324 100644
> --- a/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> +++ b/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> @@ -15,6 +15,12 @@
>          <value>no</value>
>        </enum>
>      </loader>
> +    <nvram supported='yes'>
> +      <enum name='format'>
> +        <value>raw</value>
> +        <value>qcow2</value>
> +      </enum>
> +    </nvram>
>    </os>
>    <devices>
>      <disk supported='yes'>
> diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
> index 70d2ef3..328ce5e 100644
> --- a/tests/domaincapstest.c
> +++ b/tests/domaincapstest.c
> @@ -70,6 +70,7 @@ fillAll(virDomainCapsPtr domCaps,
>      loader->device.supported = true;
>      SET_ALL_BITS(loader->type);
>      SET_ALL_BITS(loader->readonly);
> +    SET_ALL_BITS(loader->nvramFormat);
>      if (fillStringValues(&loader->values,
>                           "/foo/bar",
>                           "/tmp/my_path",
> 

The rest seems okay to me (but you could sell me anything around these
parts :))

Thanks
Laszlo




More information about the libvir-list mailing list