]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Tweak HPT feature parsing and formatting
authorAndrea Bolognani <abologna@redhat.com>
Wed, 23 May 2018 16:17:58 +0000 (18:17 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 26 Jun 2018 08:15:50 +0000 (10:15 +0200)
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@redhat.com>
src/conf/domain_conf.c
src/qemu/qemu_command.c
tests/qemuxml2argvdata/pseries-features.xml
tests/qemuxml2xmloutdata/pseries-features.xml [changed from symlink to file mode: 0644]

index 069ff8c2f84d553a08a7538369dbf8e958c92981..3f7b0d1bfe97ecf0f96cfbee20e85d67856f3595 100644 (file)
@@ -27258,6 +27258,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
     const char *type = NULL;
     int n;
     size_t i;
+    virBuffer attributeBuf = VIR_BUFFER_INITIALIZER;
     virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
     char *netprefix = NULL;
 
@@ -27773,12 +27774,21 @@ virDomainDefFormatInternal(virDomainDefPtr def,
                 break;
 
             case VIR_DOMAIN_FEATURE_HPT:
-                if (def->features[i] != VIR_TRISTATE_SWITCH_ON ||
-                    def->hpt_resizing == VIR_DOMAIN_HPT_RESIZING_NONE)
+                if (def->features[i] != VIR_TRISTATE_SWITCH_ON)
                     break;
 
-                virBufferAsprintf(buf, "<hpt resizing='%s'/>\n",
-                                  virDomainHPTResizingTypeToString(def->hpt_resizing));
+                virBufferFreeAndReset(&attributeBuf);
+
+                if (def->hpt_resizing != VIR_DOMAIN_HPT_RESIZING_NONE) {
+                    virBufferAsprintf(&attributeBuf,
+                                      " resizing='%s'",
+                                      virDomainHPTResizingTypeToString(def->hpt_resizing));
+                }
+
+                if (virXMLFormatElement(buf, "hpt",
+                                        &attributeBuf, NULL) < 0) {
+                    goto error;
+                }
                 break;
 
             /* coverity[dead_error_begin] */
@@ -28040,6 +28050,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  error:
     virBufferFreeAndReset(buf);
     virBufferFreeAndReset(&childrenBuf);
+    virBufferFreeAndReset(&attributeBuf);
     return -1;
 }
 
index 627561a6d8d42062fca3692467a40e4bd1355e55..1d1d7d6be9111db65410fa96822095a3ac150efb 100644 (file)
@@ -7257,24 +7257,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 &&
index 5dd0dbd0be321aaac518793d48b6518f15e569cb..5ef1a744c871370781b0738bb64f4f7aa22bb6e4 100644 (file)
@@ -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>
deleted file mode 120000 (symlink)
index 1b01dbace635388d368fc1552965c8d6315360ca..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1 +0,0 @@
-../qemuxml2argvdata/pseries-features.xml
\ No newline at end of file
new file mode 100644 (file)
index 0000000000000000000000000000000000000000..e8ed842fb6385f0167ae9be81d5a8496c233e5cc
--- /dev/null
@@ -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>