adeaf8
From d85bc1315cc00800ed6d4a1baeda9a91c34e52c4 Mon Sep 17 00:00:00 2001
2daa92
From: Cole Robinson <crobinso@redhat.com>
Daniel P. Berrange 11755d
Date: Fri, 30 Aug 2013 12:41:31 -0400
adeaf8
Subject: [PATCH] qemu: Don't add default memballoon device on ARM
2daa92
2daa92
And add test cases for a basic working ARM guest.
2daa92
---
2daa92
 docs/schemas/domaincommon.rng                      | 19 +++++++++++++
2daa92
 src/qemu/qemu_domain.c                             |  4 ++-
2daa92
 .../qemuxml2argv-arm-vexpressa9-nodevs.args        |  5 ++++
2daa92
 .../qemuxml2argv-arm-vexpressa9-nodevs.xml         | 26 +++++++++++++++++
2daa92
 tests/qemuxml2argvtest.c                           |  3 ++
2daa92
 tests/testutilsqemu.c                              | 33 ++++++++++++++++++++++
Daniel P. Berrange 11755d
 6 files changed, 89 insertions(+), 1 deletion(-)
2daa92
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args
2daa92
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml
2daa92
2daa92
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
Daniel P. Berrange 11755d
index 6978dc7..68c3e4d 100644
2daa92
--- a/docs/schemas/domaincommon.rng
2daa92
+++ b/docs/schemas/domaincommon.rng
Daniel P. Berrange 11755d
@@ -304,6 +304,7 @@
2daa92
           <ref name="hvmppc"/>
2daa92
           <ref name="hvmppc64"/>
2daa92
           <ref name="hvms390"/>
2daa92
+          <ref name="hvmarm"/>
2daa92
         </choice>
2daa92
       </optional>
2daa92
       <value>hvm</value>
Daniel P. Berrange 11755d
@@ -413,6 +414,24 @@
2daa92
       </optional>
2daa92
     </group>
2daa92
   </define>
2daa92
+  <define name="hvmarm">
2daa92
+    <group>
2daa92
+      <optional>
2daa92
+        <attribute name="arch">
2daa92
+          <choice>
2daa92
+            <value>armv7l</value>
2daa92
+          </choice>
2daa92
+        </attribute>
2daa92
+      </optional>
2daa92
+      <optional>
2daa92
+        <attribute name="machine">
2daa92
+          <data type="string">
2daa92
+            <param name="pattern">[a-zA-Z0-9_\.\-]+</param>
2daa92
+          </data>
2daa92
+        </attribute>
2daa92
+      </optional>
2daa92
+    </group>
2daa92
+  </define>
2daa92
   <define name="osexe">
2daa92
     <element name="os">
2daa92
       <element name="type">
2daa92
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
Daniel P. Berrange 11755d
index 9260301..cff6d70 100644
2daa92
--- a/src/qemu/qemu_domain.c
2daa92
+++ b/src/qemu/qemu_domain.c
Daniel P. Berrange 11755d
@@ -703,6 +703,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
Daniel P. Berrange 11755d
     bool addImplicitSATA = false;
2daa92
     bool addPCIRoot = false;
Daniel P. Berrange 11755d
     bool addPCIeRoot = false;
2daa92
+    bool addDefaultMemballoon = true;
2daa92
 
2daa92
     /* check for emulator and create a default one if needed */
2daa92
     if (!def->emulator &&
Daniel P. Berrange 11755d
@@ -737,6 +738,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
2daa92
 
2daa92
     case VIR_ARCH_ARMV7L:
2daa92
        addDefaultUSB = false;
2daa92
+       addDefaultMemballoon = false;
2daa92
        break;
2daa92
 
2daa92
     case VIR_ARCH_ALPHA:
Daniel P. Berrange 11755d
@@ -785,7 +787,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
Daniel P. Berrange 11755d
         }
Daniel P. Berrange 11755d
     }
2daa92
 
2daa92
-    if (!def->memballoon) {
2daa92
+    if (addDefaultMemballoon && !def->memballoon) {
2daa92
         virDomainMemballoonDefPtr memballoon;
2daa92
         if (VIR_ALLOC(memballoon) < 0)
2daa92
             return -1;
2daa92
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args
2daa92
new file mode 100644
2daa92
index 0000000..794dba2
2daa92
--- /dev/null
2daa92
+++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args
2daa92
@@ -0,0 +1,5 @@
2daa92
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
2daa92
+/usr/bin/qemu-system-arm -S -M vexpress-a9 -m 1024 -smp 1 -nographic \
2daa92
+-nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
2daa92
+-boot c -kernel /arm.kernel -initrd /arm.initrd \
2daa92
+-append console=ttyAMA0,115200n8 -dtb /arm.dtb -usb
2daa92
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml
2daa92
new file mode 100644
2daa92
index 0000000..3f318c8
2daa92
--- /dev/null
2daa92
+++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml
2daa92
@@ -0,0 +1,26 @@
2daa92
+<domain type="qemu">
2daa92
+  <name>armtest</name>
2daa92
+  <uuid>496d7ea8-9739-544b-4ebd-ef08be936e6a</uuid>
2daa92
+  <memory>1048576</memory>
2daa92
+  <currentMemory>1048576</currentMemory>
2daa92
+  <vcpu>1</vcpu>
2daa92
+  <os>
2daa92
+    <type arch="armv7l" machine="vexpress-a9">hvm</type>
2daa92
+    <kernel>/arm.kernel</kernel>
2daa92
+    <initrd>/arm.initrd</initrd>
2daa92
+    <dtb>/arm.dtb</dtb>
2daa92
+    <cmdline>console=ttyAMA0,115200n8</cmdline>
2daa92
+  </os>
2daa92
+  <features>
2daa92
+    <acpi/>
2daa92
+    <apic/>
2daa92
+    <pae/>
2daa92
+  </features>
2daa92
+  <clock offset="utc"/>
2daa92
+  <on_poweroff>destroy</on_poweroff>
2daa92
+  <on_reboot>restart</on_reboot>
2daa92
+  <on_crash>restart</on_crash>
2daa92
+  <devices>
2daa92
+    <emulator>/usr/bin/qemu-system-arm</emulator>
2daa92
+  </devices>
2daa92
+</domain>
2daa92
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
Daniel P. Berrange 11755d
index 4e3508b..cb6106f 100644
2daa92
--- a/tests/qemuxml2argvtest.c
2daa92
+++ b/tests/qemuxml2argvtest.c
Daniel P. Berrange 11755d
@@ -1057,6 +1057,9 @@ mymain(void)
Daniel P. Berrange 11755d
             QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
Daniel P. Berrange 11755d
             QEMU_CAPS_Q35_PCI_HOLE64_SIZE);
2daa92
 
2daa92
+    DO_TEST("arm-vexpressa9-nodevs",
2daa92
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2daa92
+
2daa92
     virObjectUnref(driver.config);
2daa92
     virObjectUnref(driver.caps);
2daa92
     virObjectUnref(driver.xmlopt);
2daa92
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
2daa92
index fac83b2..92433ef 100644
2daa92
--- a/tests/testutilsqemu.c
2daa92
+++ b/tests/testutilsqemu.c
2daa92
@@ -145,6 +145,36 @@ error:
2daa92
     return -1;
2daa92
 }
2daa92
 
2daa92
+static int testQemuAddArmGuest(virCapsPtr caps)
2daa92
+{
2daa92
+    static const char *machines[] = { "vexpress-a9",
2daa92
+                                      "vexpress-a15",
2daa92
+                                      "versatilepb" };
2daa92
+    virCapsGuestMachinePtr *capsmachines = NULL;
2daa92
+    virCapsGuestPtr guest;
2daa92
+
2daa92
+    capsmachines = virCapabilitiesAllocMachines(machines,
2daa92
+                                                ARRAY_CARDINALITY(machines));
2daa92
+    if (!capsmachines)
2daa92
+        goto error;
2daa92
+
2daa92
+    guest = virCapabilitiesAddGuest(caps, "hvm", VIR_ARCH_ARMV7L,
2daa92
+                                    "/usr/bin/qemu-system-arm", NULL,
2daa92
+                                    ARRAY_CARDINALITY(machines),
2daa92
+                                    capsmachines);
2daa92
+    if (!guest)
2daa92
+        goto error;
2daa92
+
2daa92
+    if (!virCapabilitiesAddGuestDomain(guest, "qemu", NULL, NULL, 0, NULL))
2daa92
+        goto error;
2daa92
+
2daa92
+    return 0;
2daa92
+
2daa92
+error:
2daa92
+    virCapabilitiesFreeMachines(capsmachines, ARRAY_CARDINALITY(machines));
2daa92
+    return -1;
2daa92
+}
2daa92
+
2daa92
 
2daa92
 virCapsPtr testQemuCapsInit(void) {
2daa92
     virCapsPtr caps;
2daa92
@@ -270,6 +300,9 @@ virCapsPtr testQemuCapsInit(void) {
2daa92
     if (testQemuAddS390Guest(caps))
2daa92
         goto cleanup;
2daa92
 
2daa92
+    if (testQemuAddArmGuest(caps))
2daa92
+        goto cleanup;
2daa92
+
2daa92
     if (virTestGetDebug()) {
2daa92
         char *caps_str;
2daa92