[libvirt] [RFC PATCH 2/6] conf: Tweak HPT parsing and formatting

Andrea Bolognani abologna at redhat.com
Wed May 23 16:17:58 UTC 2018


This doesn't seem very useful at the moment, but it will make
sense once we introduce another HPT-related setting.

The output XML is decoupled from the input XML in preparation
of future changes as well; while doing so, we can shave a few
lines off the latter.

This commit is best viewed with 'git show -w'.

Signed-off-by: Andrea Bolognani <abologna at redhat.com>
---
 src/conf/domain_conf.c                        | 25 ++++++++++++---
 src/qemu/qemu_command.c                       | 32 ++++++++++---------
 tests/qemuxml2argvdata/pseries-features.xml   | 14 ++------
 tests/qemuxml2xmloutdata/pseries-features.xml | 29 ++++++++++++++++-
 4 files changed, 68 insertions(+), 32 deletions(-)
 mode change 120000 => 100644 tests/qemuxml2xmloutdata/pseries-features.xml

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 355e497002..20b845f02a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -27207,14 +27207,31 @@ virDomainDefFormatInternal(virDomainDefPtr def,
                                   virDomainIOAPICTypeToString(def->features[i]));
                 break;
 
-            case VIR_DOMAIN_FEATURE_HPT:
+            case VIR_DOMAIN_FEATURE_HPT: {
+                bool hasResizing = def->hpt_resizing != VIR_DOMAIN_HPT_RESIZING_NONE;
+                char *resizing = NULL;
+
                 if (def->features[i] != VIR_TRISTATE_SWITCH_ON ||
-                    def->hpt_resizing == VIR_DOMAIN_HPT_RESIZING_NONE)
+                    !hasResizing) {
                     break;
+                }
+
+                if (hasResizing) {
+                    if (virAsprintf(&resizing, " resizing='%s'",
+                                    virDomainHPTResizingTypeToString(def->hpt_resizing)) < 0) {
+                        goto error;
+                    }
+                } else {
+                    if (VIR_STRDUP(resizing, "") < 0)
+                        goto error;
+                }
 
-                virBufferAsprintf(buf, "<hpt resizing='%s'/>\n",
-                                  virDomainHPTResizingTypeToString(def->hpt_resizing));
+                virBufferAsprintf(buf, "<hpt%s/>\n",
+                                  resizing);
+
+                VIR_FREE(resizing);
                 break;
+            }
 
             /* coverity[dead_error_begin] */
             case VIR_DOMAIN_FEATURE_LAST:
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ddbde54a8c..b446a08613 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7173,24 +7173,26 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
     }
 
     if (def->features[VIR_DOMAIN_FEATURE_HPT] == VIR_TRISTATE_SWITCH_ON) {
-        const char *str;
 
-        if (def->hpt_resizing != VIR_DOMAIN_HPT_RESIZING_NONE &&
-            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("HTP resizing is not supported by this "
-                             "QEMU binary"));
-            goto cleanup;
-        }
+        if (def->hpt_resizing != VIR_DOMAIN_HPT_RESIZING_NONE) {
+            const char *str;
 
-        str = virDomainHPTResizingTypeToString(def->hpt_resizing);
-        if (!str) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("Invalid setting for HPT resizing"));
-            goto cleanup;
-        }
+            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT)) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("HTP resizing is not supported by this "
+                                 "QEMU binary"));
+                goto cleanup;
+            }
+
+            str = virDomainHPTResizingTypeToString(def->hpt_resizing);
+            if (!str) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("Invalid setting for HPT resizing"));
+                goto cleanup;
+            }
 
-        virBufferAsprintf(&buf, ",resize-hpt=%s", str);
+            virBufferAsprintf(&buf, ",resize-hpt=%s", str);
+        }
     }
 
     if (cpu && cpu->model &&
diff --git a/tests/qemuxml2argvdata/pseries-features.xml b/tests/qemuxml2argvdata/pseries-features.xml
index 5dd0dbd0be..5ef1a744c8 100644
--- a/tests/qemuxml2argvdata/pseries-features.xml
+++ b/tests/qemuxml2argvdata/pseries-features.xml
@@ -2,27 +2,17 @@
   <name>guest</name>
   <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
   <memory unit='KiB'>524288</memory>
-  <currentMemory unit='KiB'>524288</currentMemory>
   <vcpu placement='static'>1</vcpu>
   <os>
     <type arch='ppc64' machine='pseries'>hvm</type>
-    <boot dev='hd'/>
   </os>
   <features>
     <hpt resizing='required'/>
   </features>
-  <clock offset='utc'/>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>destroy</on_crash>
   <devices>
     <emulator>/usr/bin/qemu-system-ppc64</emulator>
-    <controller type='usb' index='0' model='none'/>
-    <controller type='pci' index='0' model='pci-root'>
-      <model name='spapr-pci-host-bridge'/>
-      <target index='0'/>
-    </controller>
+    <controller type='pci' model='pci-root'/>
+    <controller type='usb' model='none'/>
     <memballoon model='none'/>
-    <panic model='pseries'/>
   </devices>
 </domain>
diff --git a/tests/qemuxml2xmloutdata/pseries-features.xml b/tests/qemuxml2xmloutdata/pseries-features.xml
deleted file mode 120000
index 1b01dbace6..0000000000
--- a/tests/qemuxml2xmloutdata/pseries-features.xml
+++ /dev/null
@@ -1 +0,0 @@
-../qemuxml2argvdata/pseries-features.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/pseries-features.xml b/tests/qemuxml2xmloutdata/pseries-features.xml
new file mode 100644
index 0000000000..e8ed842fb6
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/pseries-features.xml
@@ -0,0 +1,28 @@
+<domain type='qemu'>
+  <name>guest</name>
+  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
+  <memory unit='KiB'>524288</memory>
+  <currentMemory unit='KiB'>524288</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='ppc64' machine='pseries'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <features>
+    <hpt resizing='required'/>
+  </features>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-ppc64</emulator>
+    <controller type='pci' index='0' model='pci-root'>
+      <model name='spapr-pci-host-bridge'/>
+      <target index='0'/>
+    </controller>
+    <controller type='usb' index='0' model='none'/>
+    <memballoon model='none'/>
+    <panic model='pseries'/>
+  </devices>
+</domain>
-- 
2.17.0




More information about the libvir-list mailing list