diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index c95d1d2c09..d17177a8fb 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -304,6 +304,7 @@
+
hvm
@@ -413,6 +414,24 @@
+
+
+
+
+
+ armv7l
+
+
+
+
+
+
+ [a-zA-Z0-9_\.\-]+
+
+
+
+
+
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 926030122e..cff6d70101 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -703,6 +703,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
bool addImplicitSATA = false;
bool addPCIRoot = false;
bool addPCIeRoot = false;
+ bool addDefaultMemballoon = true;
/* check for emulator and create a default one if needed */
if (!def->emulator &&
@@ -737,6 +738,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
case VIR_ARCH_ARMV7L:
addDefaultUSB = false;
+ addDefaultMemballoon = false;
break;
case VIR_ARCH_ALPHA:
@@ -785,7 +787,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
}
}
- if (!def->memballoon) {
+ if (addDefaultMemballoon && !def->memballoon) {
virDomainMemballoonDefPtr memballoon;
if (VIR_ALLOC(memballoon) < 0)
return -1;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args
new file mode 100644
index 0000000000..794dba2d90
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args
@@ -0,0 +1,5 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-arm -S -M vexpress-a9 -m 1024 -smp 1 -nographic \
+-nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
+-boot c -kernel /arm.kernel -initrd /arm.initrd \
+-append console=ttyAMA0,115200n8 -dtb /arm.dtb -usb
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml
new file mode 100644
index 0000000000..3f318c8bb2
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml
@@ -0,0 +1,26 @@
+
+ armtest
+ 496d7ea8-9739-544b-4ebd-ef08be936e6a
+ 1048576
+ 1048576
+ 1
+
+ hvm
+ /arm.kernel
+ /arm.initrd
+ /arm.dtb
+ console=ttyAMA0,115200n8
+
+
+
+
+
+
+
+ destroy
+ restart
+ restart
+
+ /usr/bin/qemu-system-arm
+
+
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 0f9360c72e..e6f319ae60 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1061,6 +1061,9 @@ mymain(void)
QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
QEMU_CAPS_Q35_PCI_HOLE64_SIZE);
+ DO_TEST("arm-vexpressa9-nodevs",
+ QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
+
virObjectUnref(driver.config);
virObjectUnref(driver.caps);
virObjectUnref(driver.xmlopt);
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index fac83b206b..92433efacf 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -145,6 +145,36 @@ error:
return -1;
}
+static int testQemuAddArmGuest(virCapsPtr caps)
+{
+ static const char *machines[] = { "vexpress-a9",
+ "vexpress-a15",
+ "versatilepb" };
+ virCapsGuestMachinePtr *capsmachines = NULL;
+ virCapsGuestPtr guest;
+
+ capsmachines = virCapabilitiesAllocMachines(machines,
+ ARRAY_CARDINALITY(machines));
+ if (!capsmachines)
+ goto error;
+
+ guest = virCapabilitiesAddGuest(caps, "hvm", VIR_ARCH_ARMV7L,
+ "/usr/bin/qemu-system-arm", NULL,
+ ARRAY_CARDINALITY(machines),
+ capsmachines);
+ if (!guest)
+ goto error;
+
+ if (!virCapabilitiesAddGuestDomain(guest, "qemu", NULL, NULL, 0, NULL))
+ goto error;
+
+ return 0;
+
+error:
+ virCapabilitiesFreeMachines(capsmachines, ARRAY_CARDINALITY(machines));
+ return -1;
+}
+
virCapsPtr testQemuCapsInit(void) {
virCapsPtr caps;
@@ -270,6 +300,9 @@ virCapsPtr testQemuCapsInit(void) {
if (testQemuAddS390Guest(caps))
goto cleanup;
+ if (testQemuAddArmGuest(caps))
+ goto cleanup;
+
if (virTestGetDebug()) {
char *caps_str;