[libvirt PATCH 8/9] conf: introduce support for firmware auto-selection feature filtering

Daniel P. Berrangé berrange at redhat.com
Mon Mar 29 17:33:06 UTC 2021


On Thu, Mar 18, 2021 at 01:26:45PM +0100, Pavel Hrdina wrote:
> When the firmware auto-selection was introduced it always picked first
> usable firmware based on the JSON descriptions on the host. It is
> possible to add/remove/change the JSON files but it will always be for
> the whole host.
> 
> This patch introduces support for configuring the auto-selection per VM
> by adding users an option to limit what features they would like to have
> available in the firmware.
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  docs/formatdomain.rst                         | 31 +++++++
>  docs/schemas/domaincommon.rng                 | 23 +++++
>  src/conf/domain_conf.c                        | 83 ++++++++++++++++++-
>  src/conf/domain_conf.h                        | 10 +++
>  .../os-firmware-efi-invalid-type.xml          | 28 +++++++
>  ...os-firmware-invalid-type.x86_64-latest.err |  1 +
>  .../os-firmware-invalid-type.xml              | 28 +++++++
>  tests/qemuxml2argvtest.c                      |  1 +
>  ...aarch64-os-firmware-efi.aarch64-latest.xml |  1 +
>  .../os-firmware-bios.x86_64-latest.xml        |  1 +
>  .../os-firmware-efi-secboot.x86_64-latest.xml |  1 +
>  .../os-firmware-efi.x86_64-latest.xml         |  1 +
>  tests/vmx2xmldata/vmx2xml-firmware-efi.xml    |  1 +
>  13 files changed, 207 insertions(+), 3 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-invalid-type.xml
>  create mode 100644 tests/qemuxml2argvdata/os-firmware-invalid-type.x86_64-latest.err
>  create mode 100644 tests/qemuxml2argvdata/os-firmware-invalid-type.xml


> @@ -19600,22 +19606,67 @@ virDomainDefParseBootFirmwareOptions(virDomainDefPtr def,
>                                       xmlXPathContextPtr ctxt)
>  {
>      g_autofree char *firmware = virXPathString("string(./os/@firmware)", ctxt);
> +    g_autofree char *type = virXPathString("string(./os/firmware/@type)", ctxt);



> -    if (!firmware)
> +    if (!firmware && !type)
>          return 0;
>  
> -    fw = virDomainOsDefFirmwareTypeFromString(firmware);
> +    if (firmware && type && STRNEQ(firmware, type)) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                       _("firmware attribute and firmware type has to be the same"));
> +        return -1;
> +    }

Why do we need to introduce a second attribute that must be the same as the
attribute we already have ?

This feels like it introduces a error scenario that we don't really need to
have and is redundant data for the user.


> diff --git a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
> index 627e285ae1..cb4f3ccfce 100644
> --- a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
> +++ b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
> @@ -6,6 +6,7 @@
>    <vcpu placement='static'>1</vcpu>
>    <os firmware='efi'>
>      <type arch='aarch64' machine='virt-4.0'>hvm</type>
> +    <firmware type='efi'/>

This just looks odd having to set  'efi' twice.

>      <kernel>/aarch64.kernel</kernel>
>      <initrd>/aarch64.initrd</initrd>
>      <cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>

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