From d85bc1315cc00800ed6d4a1baeda9a91c34e52c4 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Fri, 30 Aug 2013 12:41:31 -0400 Subject: [PATCH] qemu: Don't add default memballoon device on ARM And add test cases for a basic working ARM guest. --- docs/schemas/domaincommon.rng | 19 +++++++++++++ src/qemu/qemu_domain.c | 4 ++- .../qemuxml2argv-arm-vexpressa9-nodevs.args | 5 ++++ .../qemuxml2argv-arm-vexpressa9-nodevs.xml | 26 +++++++++++++++++ tests/qemuxml2argvtest.c | 3 ++ tests/testutilsqemu.c | 33 ++++++++++++++++++++++ 6 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-arm-vexpressa9-nodevs.xml diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 6978dc7..68c3e4d 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 9260301..cff6d70 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 0000000..794dba2 --- /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 0000000..3f318c8 --- /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 4e3508b..cb6106f 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1057,6 +1057,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 fac83b2..92433ef 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;