render / rpms / libvirt

Forked from rpms/libvirt 4 months ago
Clone
b35f2b
From 4ca3f2f590fb860b01f1eb5fec8929ceba702dc6 Mon Sep 17 00:00:00 2001
b35f2b
Message-Id: <4ca3f2f590fb860b01f1eb5fec8929ceba702dc6@dist-git>
b35f2b
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
b35f2b
Date: Fri, 21 May 2021 14:16:14 +0200
b35f2b
Subject: [PATCH] conf: remove duplicated firmware type attribute
b35f2b
MIME-Version: 1.0
b35f2b
Content-Type: text/plain; charset=UTF-8
b35f2b
Content-Transfer-Encoding: 8bit
b35f2b
b35f2b
The
b35f2b
b35f2b
  <os firmware='efi'>
b35f2b
    <firmware type='efi'>
b35f2b
      <feature enabled='no' name='enrolled-keys'/>
b35f2b
    </firmware>
b35f2b
  </os>
b35f2b
b35f2b
repeats the firmware attribute twice. This has no functional benefit, as
b35f2b
evidenced by fact that we use a single struct field to store both
b35f2b
attributes, while needlessly introducing an error scenario. The XML can
b35f2b
just be simplified to:
b35f2b
b35f2b
  <os firmware='efi'>
b35f2b
    <firmware>
b35f2b
      <feature enabled='no' name='enrolled-keys'/>
b35f2b
    </firmware>
b35f2b
  </os>
b35f2b
b35f2b
which also means that we don't need to emit the empty element
b35f2b
<firmware type='efi'/> for all existing configs too.
b35f2b
b35f2b
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
b35f2b
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
b35f2b
(cherry picked from commit a9b1375d7d2f7d240dce09c5f8b62e568e386051)
b35f2b
b35f2b
Conflicts:
b35f2b
    docs/formatdomain.rst
b35f2b
        - we still have formatdomain.html.in in downstream
b35f2b
b35f2b
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
b35f2b
b35f2b
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
b35f2b
Message-Id: <299fd16fc3ce632bf25ca55cc4bb65a225437d61.1621599207.git.phrdina@redhat.com>
b35f2b
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
b35f2b
---
b35f2b
 docs/formatdomain.html.in                     | 15 ------
b35f2b
 docs/schemas/domaincommon.rng                 | 10 +---
b35f2b
 src/conf/domain_conf.c                        | 48 ++++++-------------
b35f2b
 .../os-firmware-efi-no-enrolled-keys.xml      |  2 +-
b35f2b
 .../os-firmware-invalid-type.xml              | 28 -----------
b35f2b
 tests/qemuxml2argvtest.c                      |  1 -
b35f2b
 ...aarch64-os-firmware-efi.aarch64-latest.xml |  1 -
b35f2b
 .../os-firmware-bios.x86_64-latest.xml        |  1 -
b35f2b
 .../os-firmware-efi-secboot.x86_64-latest.xml |  1 -
b35f2b
 .../os-firmware-efi.x86_64-latest.xml         |  1 -
b35f2b
 tests/vmx2xmldata/vmx2xml-firmware-efi.xml    |  1 -
b35f2b
 11 files changed, 18 insertions(+), 91 deletions(-)
b35f2b
 delete mode 100644 tests/qemuxml2argvdata/os-firmware-invalid-type.xml
b35f2b
b35f2b
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
b35f2b
index 11f31618af..79e2e51c54 100644
b35f2b
--- a/docs/formatdomain.html.in
b35f2b
+++ b/docs/formatdomain.html.in
b35f2b
@@ -183,21 +183,6 @@
b35f2b
       
firmware
b35f2b
       
b35f2b
         

Since 7.2.0 QEMU/KVM only

b35f2b
-        

b35f2b
-          When used together with firmware attribute of
b35f2b
-          os element the type attribute must
b35f2b
-          have the same value.
b35f2b
-        

b35f2b
-        

b35f2b
-          List of mandatory attributes:
b35f2b
-          
    b35f2b
    -            
  • b35f2b
    -              type (accepted values are bios
    b35f2b
    -              and efi) same as the firmware
    b35f2b
    -              attribute of os element.
    b35f2b
    -            
    b35f2b
    -          
    b35f2b
    -        

    b35f2b
             

    b35f2b
               When using firmware auto-selection there are different features
    b35f2b
               enabled in the firmwares. The list of features can be used to
    b35f2b
    diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
    b35f2b
    index b7f6a6b494..ec8167e588 100644
    b35f2b
    --- a/docs/schemas/domaincommon.rng
    b35f2b
    +++ b/docs/schemas/domaincommon.rng
    b35f2b
    @@ -270,13 +270,7 @@
    b35f2b
             <ref name="ostypehvm"/>
    b35f2b
             <optional>
    b35f2b
               <element name="firmware">
    b35f2b
    -            <attribute name="type">
    b35f2b
    -              <choice>
    b35f2b
    -                <value>bios</value>
    b35f2b
    -                <value>efi</value>
    b35f2b
    -              </choice>
    b35f2b
    -            </attribute>
    b35f2b
    -            <zeroOrMore>
    b35f2b
    +            <oneOrMore>
    b35f2b
                   <element name="feature">
    b35f2b
                     <attribute name="enabled">
    b35f2b
                       <ref name="virYesNo"/>
    b35f2b
    @@ -288,7 +282,7 @@
    b35f2b
                       </choice>
    b35f2b
                     </attribute>
    b35f2b
                   </element>
    b35f2b
    -            </zeroOrMore>
    b35f2b
    +            </oneOrMore>
    b35f2b
               </element>
    b35f2b
             </optional>
    b35f2b
             <optional>
    b35f2b
    diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
    b35f2b
    index 2ffa9c8a2a..6806064016 100644
    b35f2b
    --- a/src/conf/domain_conf.c
    b35f2b
    +++ b/src/conf/domain_conf.c
    b35f2b
    @@ -19389,31 +19389,21 @@ virDomainDefParseBootFirmwareOptions(virDomainDefPtr def,
    b35f2b
                                          xmlXPathContextPtr ctxt)
    b35f2b
     {
    b35f2b
         g_autofree char *firmware = virXPathString("string(./os/@firmware)", ctxt);
    b35f2b
    -    g_autofree char *type = virXPathString("string(./os/firmware/@type)", ctxt);
    b35f2b
         g_autofree xmlNodePtr *nodes = NULL;
    b35f2b
         g_autofree int *features = NULL;
    b35f2b
         int fw = 0;
    b35f2b
         int n = 0;
    b35f2b
         size_t i;
    b35f2b
     
    b35f2b
    -    if (!firmware && !type)
    b35f2b
    +    if (!firmware)
    b35f2b
             return 0;
    b35f2b
     
    b35f2b
    -    if (firmware && type && STRNEQ(firmware, type)) {
    b35f2b
    -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
    b35f2b
    -                       _("firmware attribute and firmware type has to be the same"));
    b35f2b
    -        return -1;
    b35f2b
    -    }
    b35f2b
    -
    b35f2b
    -    if (!type)
    b35f2b
    -        type = g_steal_pointer(&firmware);
    b35f2b
    -
    b35f2b
    -    fw = virDomainOsDefFirmwareTypeFromString(type);
    b35f2b
    +    fw = virDomainOsDefFirmwareTypeFromString(firmware);
    b35f2b
     
    b35f2b
         if (fw <= 0) {
    b35f2b
             virReportError(VIR_ERR_XML_ERROR,
    b35f2b
                            _("unknown firmware value %s"),
    b35f2b
    -                       type);
    b35f2b
    +                       firmware);
    b35f2b
             return -1;
    b35f2b
         }
    b35f2b
     
    b35f2b
    @@ -29039,30 +29029,22 @@ virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
    b35f2b
             virBufferAsprintf(buf, ">%s</type>\n",
    b35f2b
                               virDomainOSTypeToString(def->os.type));
    b35f2b
     
    b35f2b
    -    if (def->os.firmware) {
    b35f2b
    -        virBufferAsprintf(buf, "
    b35f2b
    -                          virDomainOsDefFirmwareTypeToString(def->os.firmware));
    b35f2b
    -
    b35f2b
    -        if (def->os.firmwareFeatures) {
    b35f2b
    -            virBufferAddLit(buf, ">\n");
    b35f2b
    -
    b35f2b
    -            virBufferAdjustIndent(buf, 2);
    b35f2b
    +    if (def->os.firmwareFeatures) {
    b35f2b
    +        virBufferAddLit(buf, "<firmware>\n");
    b35f2b
    +        virBufferAdjustIndent(buf, 2);
    b35f2b
     
    b35f2b
    -            for (i = 0; i < VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST; i++) {
    b35f2b
    -                if (def->os.firmwareFeatures[i] == VIR_TRISTATE_BOOL_ABSENT)
    b35f2b
    -                    continue;
    b35f2b
    +        for (i = 0; i < VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST; i++) {
    b35f2b
    +            if (def->os.firmwareFeatures[i] == VIR_TRISTATE_BOOL_ABSENT)
    b35f2b
    +                continue;
    b35f2b
     
    b35f2b
    -                virBufferAsprintf(buf, "<feature enabled='%s' name='%s'/>\n",
    b35f2b
    -                                  virTristateBoolTypeToString(def->os.firmwareFeatures[i]),
    b35f2b
    -                                  virDomainOsDefFirmwareFeatureTypeToString(i));
    b35f2b
    -            }
    b35f2b
    +            virBufferAsprintf(buf, "<feature enabled='%s' name='%s'/>\n",
    b35f2b
    +                              virTristateBoolTypeToString(def->os.firmwareFeatures[i]),
    b35f2b
    +                              virDomainOsDefFirmwareFeatureTypeToString(i));
    b35f2b
    +        }
    b35f2b
     
    b35f2b
    -            virBufferAdjustIndent(buf, -2);
    b35f2b
    +        virBufferAdjustIndent(buf, -2);
    b35f2b
     
    b35f2b
    -            virBufferAddLit(buf, "</firmware>\n");
    b35f2b
    -        } else {
    b35f2b
    -            virBufferAddLit(buf, "/>\n");
    b35f2b
    -        }
    b35f2b
    +        virBufferAddLit(buf, "</firmware>\n");
    b35f2b
         }
    b35f2b
     
    b35f2b
         virBufferEscapeString(buf, "<init>%s</init>\n",
    b35f2b
    diff --git a/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
    b35f2b
    index 7f8f57a859..4999c4f125 100644
    b35f2b
    --- a/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
    b35f2b
    +++ b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
    b35f2b
    @@ -6,7 +6,7 @@
    b35f2b
       <vcpu placement='static'>1</vcpu>
    b35f2b
       <os firmware='efi'>
    b35f2b
         <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
    b35f2b
    -    <firmware type='efi'>
    b35f2b
    +    <firmware>
    b35f2b
           <feature enabled='no' name='enrolled-keys'/>
    b35f2b
         </firmware>
    b35f2b
         <boot dev='hd'/>
    b35f2b
    diff --git a/tests/qemuxml2argvdata/os-firmware-invalid-type.xml b/tests/qemuxml2argvdata/os-firmware-invalid-type.xml
    b35f2b
    deleted file mode 100644
    b35f2b
    index 41360df0f7..0000000000
    b35f2b
    --- a/tests/qemuxml2argvdata/os-firmware-invalid-type.xml
    b35f2b
    +++ /dev/null
    b35f2b
    @@ -1,28 +0,0 @@
    b35f2b
    -<domain type='kvm'>
    b35f2b
    -  <name>fedora</name>
    b35f2b
    -  <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
    b35f2b
    -  <memory unit='KiB'>8192</memory>
    b35f2b
    -  <currentMemory unit='KiB'>8192</currentMemory>
    b35f2b
    -  <vcpu placement='static'>1</vcpu>
    b35f2b
    -  <os firmware='efi'>
    b35f2b
    -    <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
    b35f2b
    -    <firmware type='bios'/>
    b35f2b
    -    <loader secure='no'/>
    b35f2b
    -    <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
    b35f2b
    -    <boot dev='hd'/>
    b35f2b
    -    <bootmenu enable='yes'/>
    b35f2b
    -  </os>
    b35f2b
    -  <features>
    b35f2b
    -    <acpi/>
    b35f2b
    -    <apic/>
    b35f2b
    -    <pae/>
    b35f2b
    -  </features>
    b35f2b
    -  <clock offset='utc'/>
    b35f2b
    -  <on_poweroff>destroy</on_poweroff>
    b35f2b
    -  <on_reboot>restart</on_reboot>
    b35f2b
    -  <on_crash>restart</on_crash>
    b35f2b
    -  <devices>
    b35f2b
    -    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    b35f2b
    -    <memballoon model='none'/>
    b35f2b
    -  </devices>
    b35f2b
    -</domain>
    b35f2b
    diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
    b35f2b
    index 5e16d7fd31..be8054fa6a 100644
    b35f2b
    --- a/tests/qemuxml2argvtest.c
    b35f2b
    +++ b/tests/qemuxml2argvtest.c
    b35f2b
    @@ -3095,7 +3095,6 @@ mymain(void)
    b35f2b
         DO_TEST_CAPS_LATEST("os-firmware-efi");
    b35f2b
         DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
    b35f2b
         DO_TEST_CAPS_LATEST("os-firmware-efi-no-enrolled-keys");
    b35f2b
    -    DO_TEST_CAPS_LATEST_PARSE_ERROR("os-firmware-invalid-type");
    b35f2b
         DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");
    b35f2b
     
    b35f2b
         DO_TEST_CAPS_LATEST("vhost-user-vga");
    b35f2b
    diff --git a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
    b35f2b
    index 3cac8fc5c6..1e51d55305 100644
    b35f2b
    --- a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
    b35f2b
    +++ b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
    b35f2b
    @@ -6,7 +6,6 @@
    b35f2b
       <vcpu placement='static'>1</vcpu>
    b35f2b
       <os firmware='efi'>
    b35f2b
         <type arch='aarch64' machine='virt-4.0'>hvm</type>
    b35f2b
    -    <firmware type='efi'/>
    b35f2b
         <kernel>/aarch64.kernel</kernel>
    b35f2b
         <initrd>/aarch64.initrd</initrd>
    b35f2b
         <cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
    b35f2b
    diff --git a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
    b35f2b
    index ef24f2fece..60d3498765 100644
    b35f2b
    --- a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
    b35f2b
    +++ b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
    b35f2b
    @@ -6,7 +6,6 @@
    b35f2b
       <vcpu placement='static'>1</vcpu>
    b35f2b
       <os firmware='bios'>
    b35f2b
         <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
    b35f2b
    -    <firmware type='bios'/>
    b35f2b
         <loader secure='no'/>
    b35f2b
         <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
    b35f2b
         <boot dev='hd'/>
    b35f2b
    diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
    b35f2b
    index 3757191e8e..938da73711 100644
    b35f2b
    --- a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
    b35f2b
    +++ b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
    b35f2b
    @@ -6,7 +6,6 @@
    b35f2b
       <vcpu placement='static'>1</vcpu>
    b35f2b
       <os firmware='efi'>
    b35f2b
         <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
    b35f2b
    -    <firmware type='efi'/>
    b35f2b
         <loader secure='yes'/>
    b35f2b
         <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
    b35f2b
         <boot dev='hd'/>
    b35f2b
    diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
    b35f2b
    index f2e6b7f36d..97ce8a75c7 100644
    b35f2b
    --- a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
    b35f2b
    +++ b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
    b35f2b
    @@ -6,7 +6,6 @@
    b35f2b
       <vcpu placement='static'>1</vcpu>
    b35f2b
       <os firmware='efi'>
    b35f2b
         <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
    b35f2b
    -    <firmware type='efi'/>
    b35f2b
         <loader secure='no'/>
    b35f2b
         <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
    b35f2b
         <boot dev='hd'/>
    b35f2b
    diff --git a/tests/vmx2xmldata/vmx2xml-firmware-efi.xml b/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
    b35f2b
    index 375c47d281..e21158cebf 100644
    b35f2b
    --- a/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
    b35f2b
    +++ b/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
    b35f2b
    @@ -5,7 +5,6 @@
    b35f2b
       <vcpu placement='static'>1</vcpu>
    b35f2b
       <os firmware='efi'>
    b35f2b
         <type arch='i686'>hvm</type>
    b35f2b
    -    <firmware type='efi'/>
    b35f2b
       </os>
    b35f2b
       <clock offset='utc'/>
    b35f2b
       <on_poweroff>destroy</on_poweroff>
    b35f2b
    -- 
    b35f2b
    2.31.1
    b35f2b