Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808938/?format=api
{ "id": 808938, "url": "http://patchwork.ozlabs.org/api/patches/808938/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901180340.30009-29-eblake@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170901180340.30009-29-eblake@redhat.com>", "list_archive_url": null, "date": "2017-09-01T18:03:39", "name": "[v6,28/29] libqtest: Remove qtest_start() and qtest_end() shortcuts", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "ccdd833d6a1028d6b9d8c5540a7cff156e4c819c", "submitter": { "id": 6591, "url": "http://patchwork.ozlabs.org/api/people/6591/?format=api", "name": "Eric Blake", "email": "eblake@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901180340.30009-29-eblake@redhat.com/mbox/", "series": [ { "id": 1089, "url": "http://patchwork.ozlabs.org/api/series/1089/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1089", "date": "2017-09-01T18:03:12", "name": "Preliminary libqtest cleanups", "version": 6, "mbox": "http://patchwork.ozlabs.org/series/1089/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808938/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808938/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com", "ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=eblake@redhat.com" ], "Received": [ "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkSNt2WFDz9sPk\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 2 Sep 2017 04:26:06 +1000 (AEST)", "from localhost ([::1]:53519 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnqdo-00034Y-21\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 14:26:04 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:56784)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnqJO-00081a-BN\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:05:09 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnqJH-0002NF-QE\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 14:04:58 -0400", "from mx1.redhat.com ([209.132.183.28]:44074)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <eblake@redhat.com>)\n\tid 1dnqJ3-0002CM-Ug; Fri, 01 Sep 2017 14:04:38 -0400", "from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id EB86B15552;\n\tFri, 1 Sep 2017 18:04:36 +0000 (UTC)", "from red.redhat.com (ovpn-121-149.rdu2.redhat.com [10.10.121.149])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 26D5162929;\n\tFri, 1 Sep 2017 18:04:28 +0000 (UTC)" ], "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com EB86B15552", "From": "Eric Blake <eblake@redhat.com>", "To": "qemu-devel@nongnu.org", "Date": "Fri, 1 Sep 2017 13:03:39 -0500", "Message-Id": "<20170901180340.30009-29-eblake@redhat.com>", "In-Reply-To": "<20170901180340.30009-1-eblake@redhat.com>", "References": "<20170901180340.30009-1-eblake@redhat.com>", "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.15", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.29]);\n\tFri, 01 Sep 2017 18:04:37 +0000 (UTC)", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]", "X-Received-From": "209.132.183.28", "Subject": "[Qemu-devel] [PATCH v6 28/29] libqtest: Remove qtest_start() and\n\tqtest_end() shortcuts", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Thomas Huth <thuth@redhat.com>,\n\t\"open list:Floppy\" <qemu-block@nongnu.org>, Ben Warren\n\t<ben@skyportsystems.com>, \"Michael S. Tsirkin\" <mst@redhat.com>, \n\tJason Wang <jasowang@redhat.com>, Amit Shah <amit@kernel.org>, \n\tarmbru@redhat.com, Alexander Graf <agraf@suse.de>, \n\tKeith Busch <keith.busch@intel.com>, \"open list:sPAPR\"\n\t<qemu-ppc@nongnu.org>, Gerd Hoffmann <kraxel@redhat.com>, Stefan\n\tHajnoczi <stefanha@redhat.com>, pbonzini@redhat.com, John Snow\n\t<jsnow@redhat.com>, =?utf-8?q?Andreas_F=C3=A4rber?= <afaerber@suse.de>,\n\t\"Dr. David Alan Gilbert\" <dgilbert@redhat.com>, David Gibson\n\t<david@gibson.dropbear.id.au>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "Remove the trivial wrappers qtest_start() and qtest_end(), to make\nit obvious in the rest of the testsuite where we are still relying on\nglobal_qtest. Doing this makes it easier to see what remaining\ncleanups will be needed if we don't want an implicit dependency\non global state. Many tests can also take advantage of qtest_init()\ndoing formatting of args, avoiding a temporary local variable.\n\nSigned-off-by: Eric Blake <eblake@redhat.com>\n---\n tests/libqtest.h | 26 ------------------\n tests/libqtest.c | 4 +--\n tests/ac97-test.c | 4 +--\n tests/boot-order-test.c | 11 +++-----\n tests/boot-serial-test.c | 12 +++------\n tests/device-introspect-test.c | 24 ++++++++---------\n tests/display-vga-test.c | 18 +++++--------\n tests/drive_del-test.c | 17 ++++++------\n tests/ds1338-test.c | 2 +-\n tests/e1000-test.c | 10 ++-----\n tests/e1000e-test.c | 14 +++-------\n tests/eepro100-test.c | 11 ++------\n tests/endianness-test.c | 33 +++++++++--------------\n tests/es1370-test.c | 4 +--\n tests/fdc-test.c | 4 +--\n tests/hd-geo-test.c | 16 +++++------\n tests/i440fx-test.c | 16 +++++------\n tests/i82801b11-test.c | 5 ++--\n tests/ide-test.c | 4 +--\n tests/intel-hda-test.c | 11 ++++----\n tests/ioh3420-test.c | 7 ++---\n tests/ipmi-bt-test.c | 11 +++-----\n tests/ipmi-kcs-test.c | 5 +---\n tests/ipoctal232-test.c | 5 ++--\n tests/ivshmem-test.c | 4 +--\n tests/libqos/libqos.c | 2 +-\n tests/m25p80-test.c | 9 +++----\n tests/m48t59-test.c | 2 +-\n tests/ne2000-test.c | 4 +--\n tests/numa-test.c | 28 ++++++++++----------\n tests/nvme-test.c | 7 ++---\n tests/pc-cpu-test.c | 26 +++++++-----------\n tests/pcnet-test.c | 4 +--\n tests/pnv-xscom-test.c | 14 ++--------\n tests/prom-env-test.c | 13 ++++-----\n tests/pvpanic-test.c | 4 +--\n tests/pxe-test.c | 14 ++++------\n tests/q35-test.c | 8 +++---\n tests/qom-test.c | 7 ++---\n tests/rtc-test.c | 2 +-\n tests/rtl8139-test.c | 4 +--\n tests/spapr-phb-test.c | 5 ++--\n tests/tco-test.c | 12 ++++-----\n tests/test-arm-mptimer.c | 4 +--\n tests/test-filter-mirror.c | 16 +++++------\n tests/test-filter-redirector.c | 60 ++++++++++++++++++++----------------------\n tests/test-hmp.c | 7 ++---\n tests/test-netfilter.c | 9 +++----\n tests/test-x86-cpuid-compat.c | 13 ++++-----\n tests/tmp105-test.c | 2 +-\n tests/tpci200-test.c | 4 +--\n tests/usb-hcd-ehci-test.c | 25 +++++++++---------\n tests/usb-hcd-ohci-test.c | 4 +--\n tests/usb-hcd-xhci-test.c | 4 +--\n tests/virtio-balloon-test.c | 4 +--\n tests/virtio-blk-test.c | 13 ++++-----\n tests/virtio-console-test.c | 8 +++---\n tests/virtio-net-test.c | 4 +--\n tests/virtio-rng-test.c | 4 +--\n tests/virtio-serial-test.c | 4 +--\n tests/vmgenid-test.c | 29 ++++++--------------\n tests/vmxnet3-test.c | 4 +--\n 62 files changed, 267 insertions(+), 394 deletions(-)", "diff": "diff --git a/tests/libqtest.h b/tests/libqtest.h\nindex d338de3e22..0459526187 100644\n--- a/tests/libqtest.h\n+++ b/tests/libqtest.h\n@@ -509,32 +509,6 @@ void qtest_add_data_func_full(const char *str, void *data,\n void qtest_add_abrt_handler(GHookFunc fn, const void *data);\n\n /**\n- * qtest_start:\n- * @args: other arguments to pass to QEMU\n- *\n- * Start QEMU and assign the resulting #QTestState to a global variable.\n- * The global variable is used by \"shortcut\" functions documented below.\n- *\n- * Returns: #QTestState instance.\n- */\n-static inline QTestState *qtest_start(const char *args)\n-{\n- global_qtest = qtest_init(\"%s\", args);\n- return global_qtest;\n-}\n-\n-/**\n- * qtest_end:\n- *\n- * Shut down the QEMU process started by qtest_start().\n- */\n-static inline void qtest_end(void)\n-{\n- qtest_quit(global_qtest);\n- global_qtest = NULL;\n-}\n-\n-/**\n * qmp:\n * @fmt...: QMP message to send to qemu\n *\ndiff --git a/tests/libqtest.c b/tests/libqtest.c\nindex 18facbf130..fa4e47c137 100644\n--- a/tests/libqtest.c\n+++ b/tests/libqtest.c\n@@ -970,7 +970,7 @@ void qtest_cb_for_every_machine(void (*cb)(const char *machine))\n QString *qstr;\n const char *mname;\n\n- qtest_start(\"-machine none\");\n+ global_qtest = qtest_init(\"-machine none\");\n response = qmp(\"{ 'execute': 'query-machines' }\");\n g_assert(response);\n list = qdict_get_qlist(response, \"return\");\n@@ -987,6 +987,6 @@ void qtest_cb_for_every_machine(void (*cb)(const char *machine))\n cb(mname);\n }\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n QDECREF(response);\n }\ndiff --git a/tests/ac97-test.c b/tests/ac97-test.c\nindex e0d177bd9c..6a1edaa85a 100644\n--- a/tests/ac97-test.c\n+++ b/tests/ac97-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/ac97/nop\", nop);\n\n- qtest_start(\"-device AC97\");\n+ global_qtest = qtest_init(\"-device AC97\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/boot-order-test.c b/tests/boot-order-test.c\nindex 5fc2ca8e9e..e6efea6852 100644\n--- a/tests/boot-order-test.c\n+++ b/tests/boot-order-test.c\n@@ -28,14 +28,12 @@ static void test_a_boot_order(const char *machine,\n uint64_t expected_boot,\n uint64_t expected_reboot)\n {\n- char *args;\n uint64_t actual;\n\n- args = g_strdup_printf(\"-nodefaults%s%s %s\",\n- machine ? \" -M \" : \"\",\n- machine ?: \"\",\n- test_args);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-nodefaults%s%s %s\",\n+ machine ? \" -M \" : \"\",\n+ machine ?: \"\",\n+ test_args);\n actual = read_boot_order();\n g_assert_cmphex(actual, ==, expected_boot);\n qmp_discard_response(\"{ 'execute': 'system_reset' }\");\n@@ -47,7 +45,6 @@ static void test_a_boot_order(const char *machine,\n actual = read_boot_order();\n g_assert_cmphex(actual, ==, expected_reboot);\n qtest_quit(global_qtest);\n- g_free(args);\n }\n\n static void test_boot_orders(const char *machine,\ndiff --git a/tests/boot-serial-test.c b/tests/boot-serial-test.c\nindex b95c5e74ea..d7c0c320d7 100644\n--- a/tests/boot-serial-test.c\n+++ b/tests/boot-serial-test.c\n@@ -71,7 +71,6 @@ done:\n static void test_machine(const void *data)\n {\n const testdef_t *test = data;\n- char *args;\n char tmpname[] = \"/tmp/qtest-boot-serial-XXXXXX\";\n int fd;\n\n@@ -82,18 +81,15 @@ static void test_machine(const void *data)\n * Make sure that this test uses tcg if available: It is used as a\n * fast-enough smoketest for that.\n */\n- args = g_strdup_printf(\"-M %s,accel=tcg:kvm \"\n- \"-chardev file,id=serial0,path=%s \"\n- \"-no-shutdown -serial chardev:serial0 %s\",\n- test->machine, tmpname, test->extra);\n-\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M %s,accel=tcg:kvm \"\n+ \"-chardev file,id=serial0,path=%s \"\n+ \"-no-shutdown -serial chardev:serial0 %s\",\n+ test->machine, tmpname, test->extra);\n unlink(tmpname);\n\n check_guest_output(test, fd);\n qtest_quit(global_qtest);\n\n- g_free(args);\n close(fd);\n }\n\ndiff --git a/tests/device-introspect-test.c b/tests/device-introspect-test.c\nindex f7162c023f..1c23b71038 100644\n--- a/tests/device-introspect-test.c\n+++ b/tests/device-introspect-test.c\n@@ -126,7 +126,7 @@ static void test_device_intro_list(void)\n QList *types;\n char *help;\n\n- qtest_start(common_args);\n+ global_qtest = qtest_init(\"%s\", common_args);\n\n types = device_type_list(true);\n QDECREF(types);\n@@ -134,7 +134,7 @@ static void test_device_intro_list(void)\n help = hmp(\"device_add help\");\n g_free(help);\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n /*\n@@ -167,7 +167,7 @@ static void test_qom_list_fields(void)\n QList *non_abstract;\n QListEntry *e;\n\n- qtest_start(common_args);\n+ global_qtest = qtest_init(\"%s\", common_args);\n\n all_types = qom_list_types(NULL, true);\n non_abstract = qom_list_types(NULL, false);\n@@ -189,21 +189,21 @@ static void test_qom_list_fields(void)\n\n QDECREF(all_types);\n QDECREF(non_abstract);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_device_intro_none(void)\n {\n- qtest_start(common_args);\n+ global_qtest = qtest_init(\"%s\", common_args);\n test_one_device(\"nonexistent\");\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_device_intro_abstract(void)\n {\n- qtest_start(common_args);\n+ global_qtest = qtest_init(\"%s\", common_args);\n test_one_device(\"device\");\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_device_intro_concrete(void)\n@@ -212,7 +212,7 @@ static void test_device_intro_concrete(void)\n QListEntry *entry;\n const char *type;\n\n- qtest_start(common_args);\n+ global_qtest = qtest_init(\"%s\", common_args);\n types = device_type_list(false);\n\n QLIST_FOREACH_ENTRY(types, entry) {\n@@ -223,7 +223,7 @@ static void test_device_intro_concrete(void)\n }\n\n QDECREF(types);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_abstract_interfaces(void)\n@@ -232,7 +232,7 @@ static void test_abstract_interfaces(void)\n QListEntry *e;\n QDict *index;\n\n- qtest_start(common_args);\n+ global_qtest = qtest_init(\"%s\", common_args);\n\n all_types = qom_list_types(\"interface\", true);\n index = qom_type_index(all_types);\n@@ -257,7 +257,7 @@ static void test_abstract_interfaces(void)\n\n QDECREF(all_types);\n QDECREF(index);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/display-vga-test.c b/tests/display-vga-test.c\nindex 2d7d24eee0..51c6feaaf1 100644\n--- a/tests/display-vga-test.c\n+++ b/tests/display-vga-test.c\n@@ -12,39 +12,33 @@\n\n static void pci_cirrus(void)\n {\n- qtest_start(\"-vga none -device cirrus-vga\");\n- qtest_end();\n+ qtest_quit(qtest_init(\"-vga none -device cirrus-vga\"));\n }\n\n static void pci_stdvga(void)\n {\n- qtest_start(\"-vga none -device VGA\");\n- qtest_end();\n+ qtest_quit(qtest_init(\"-vga none -device VGA\"));\n }\n\n static void pci_secondary(void)\n {\n- qtest_start(\"-vga none -device secondary-vga\");\n- qtest_end();\n+ qtest_quit(qtest_init(\"-vga none -device secondary-vga\"));\n }\n\n static void pci_multihead(void)\n {\n- qtest_start(\"-vga none -device VGA -device secondary-vga\");\n- qtest_end();\n+ qtest_quit(qtest_init(\"-vga none -device VGA -device secondary-vga\"));\n }\n\n static void pci_virtio_gpu(void)\n {\n- qtest_start(\"-vga none -device virtio-gpu-pci\");\n- qtest_end();\n+ qtest_quit(qtest_init(\"-vga none -device virtio-gpu-pci\"));\n }\n\n #ifdef CONFIG_VIRTIO_VGA\n static void pci_virtio_vga(void)\n {\n- qtest_start(\"-vga none -device virtio-vga\");\n- qtest_end();\n+ qtest_quit(qtest_init(\"-vga none -device virtio-vga\"));\n }\n #endif\n\ndiff --git a/tests/drive_del-test.c b/tests/drive_del-test.c\nindex 2175139abb..602ab062b4 100644\n--- a/tests/drive_del-test.c\n+++ b/tests/drive_del-test.c\n@@ -45,7 +45,7 @@ static void device_del(void)\n static void test_drive_without_dev(void)\n {\n /* Start with an empty drive */\n- qtest_start(\"-drive if=none,id=drive0\");\n+ global_qtest = qtest_init(\"-drive if=none,id=drive0\");\n\n /* Delete the drive */\n drive_del();\n@@ -55,7 +55,7 @@ static void test_drive_without_dev(void)\n */\n drive_add();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_after_failed_device_add(void)\n@@ -63,7 +63,7 @@ static void test_after_failed_device_add(void)\n QDict *response;\n QDict *error;\n\n- qtest_start(\"-drive if=none,id=drive0\");\n+ global_qtest = qtest_init(\"-drive if=none,id=drive0\");\n\n /* Make device_add fail. If this leaks the virtio-blk-pci device then a\n * reference to drive0 will also be held (via qdev properties).\n@@ -86,15 +86,16 @@ static void test_after_failed_device_add(void)\n */\n drive_add();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_drive_del_device_del(void)\n {\n /* Start with a drive used by a device that unplugs instantaneously */\n- qtest_start(\"-drive if=none,id=drive0,file=null-co://,format=raw\"\n- \" -device virtio-scsi-pci\"\n- \" -device scsi-hd,drive=drive0,id=dev0\");\n+ global_qtest = qtest_init(\n+ \"-drive if=none,id=drive0,file=null-co://,format=raw\"\n+ \" -device virtio-scsi-pci\"\n+ \" -device scsi-hd,drive=drive0,id=dev0\");\n\n /*\n * Delete the drive, and then the device\n@@ -103,7 +104,7 @@ static void test_drive_del_device_del(void)\n drive_del();\n device_del();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/ds1338-test.c b/tests/ds1338-test.c\nindex 26968bc82a..da5b852351 100644\n--- a/tests/ds1338-test.c\n+++ b/tests/ds1338-test.c\n@@ -60,7 +60,7 @@ int main(int argc, char **argv)\n\n g_test_init(&argc, &argv, NULL);\n\n- s = qtest_start(\"-display none -machine imx25-pdk\");\n+ s = global_qtest = qtest_init(\"-display none -machine imx25-pdk\");\n i2c = imx_i2c_create(IMX25_I2C_0_BASE);\n addr = DS1338_ADDR;\n\ndiff --git a/tests/e1000-test.c b/tests/e1000-test.c\nindex 0c5fcdcc44..59bd8b781f 100644\n--- a/tests/e1000-test.c\n+++ b/tests/e1000-test.c\n@@ -15,15 +15,9 @@ static void test_device(gconstpointer data)\n {\n const char *model = data;\n QTestState *s;\n- char *args;\n\n- args = g_strdup_printf(\"-device %s\", model);\n- s = qtest_start(args);\n-\n- if (s) {\n- qtest_quit(s);\n- }\n- g_free(args);\n+ s = qtest_init(\"-device %s\", model);\n+ qtest_quit(s);\n }\n\n static const char *models[] = {\ndiff --git a/tests/e1000e-test.c b/tests/e1000e-test.c\nindex 32aa738b72..6ef240dc8f 100644\n--- a/tests/e1000e-test.c\n+++ b/tests/e1000e-test.c\n@@ -380,17 +380,11 @@ static void e1000e_device_clear(QPCIBus *bus, e1000e_device *d)\n\n static void data_test_init(e1000e_device *d)\n {\n- char *cmdline;\n-\n int ret = socketpair(PF_UNIX, SOCK_STREAM, 0, test_sockets);\n g_assert_cmpint(ret, != , -1);\n\n- cmdline = g_strdup_printf(\"-netdev socket,fd=%d,id=hs0 \"\n+ global_qtest = qtest_init(\"-netdev socket,fd=%d,id=hs0 \"\n \"-device e1000e,netdev=hs0\", test_sockets[1]);\n- g_assert_nonnull(cmdline);\n-\n- qtest_start(cmdline);\n- g_free(cmdline);\n\n test_alloc = pc_alloc_init(global_qtest);\n g_assert_nonnull(test_alloc);\n@@ -408,7 +402,7 @@ static void data_test_clear(e1000e_device *d)\n pc_alloc_uninit(test_alloc);\n g_free(d->pci_dev);\n qpci_free_pc(test_bus);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_e1000e_init(gconstpointer data)\n@@ -458,12 +452,12 @@ static void test_e1000e_hotplug(gconstpointer data)\n {\n static const uint8_t slot = 0x06;\n\n- qtest_start(\"-device e1000e\");\n+ global_qtest = qtest_init(\"-device e1000e\");\n\n qpci_plug_device_test(\"e1000e\", \"e1000e_net\", slot, NULL);\n qpci_unplug_acpi_device_test(\"e1000e_net\", slot);\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/eepro100-test.c b/tests/eepro100-test.c\nindex bdc8a67d57..6f49ac2656 100644\n--- a/tests/eepro100-test.c\n+++ b/tests/eepro100-test.c\n@@ -14,17 +14,10 @@ static void test_device(gconstpointer data)\n {\n const char *model = data;\n QTestState *s;\n- char *args;\n-\n- args = g_strdup_printf(\"-device %s\", model);\n- s = qtest_start(args);\n\n /* Tests only initialization so far. TODO: Implement functional tests */\n-\n- if (s) {\n- qtest_quit(s);\n- }\n- g_free(args);\n+ s = qtest_init(\"-device %s\", model);\n+ qtest_quit(s);\n }\n\n static const char *models[] = {\ndiff --git a/tests/endianness-test.c b/tests/endianness-test.c\nindex ed0bf52019..68d5dbcd14 100644\n--- a/tests/endianness-test.c\n+++ b/tests/endianness-test.c\n@@ -114,13 +114,11 @@ static void isa_outl(const TestCase *test, uint16_t addr, uint32_t value)\n static void test_endianness(gconstpointer data)\n {\n const TestCase *test = data;\n- char *args;\n\n- args = g_strdup_printf(\"-M %s%s%s -device pc-testdev\",\n- test->machine,\n- test->superio ? \" -device \" : \"\",\n- test->superio ?: \"\");\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M %s%s%s -device pc-testdev\",\n+ test->machine,\n+ test->superio ? \" -device \" : \"\",\n+ test->superio ?: \"\");\n isa_outl(test, 0xe0, 0x87654321);\n g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321);\n g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);\n@@ -183,19 +181,16 @@ static void test_endianness(gconstpointer data)\n g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x43);\n g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x21);\n qtest_quit(global_qtest);\n- g_free(args);\n }\n\n static void test_endianness_split(gconstpointer data)\n {\n const TestCase *test = data;\n- char *args;\n\n- args = g_strdup_printf(\"-M %s%s%s -device pc-testdev\",\n- test->machine,\n- test->superio ? \" -device \" : \"\",\n- test->superio ?: \"\");\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M %s%s%s -device pc-testdev\",\n+ test->machine,\n+ test->superio ? \" -device \" : \"\",\n+ test->superio ?: \"\");\n isa_outl(test, 0xe8, 0x87654321);\n g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321);\n g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);\n@@ -230,19 +225,16 @@ static void test_endianness_split(gconstpointer data)\n g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);\n g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321);\n qtest_quit(global_qtest);\n- g_free(args);\n }\n\n static void test_endianness_combine(gconstpointer data)\n {\n const TestCase *test = data;\n- char *args;\n\n- args = g_strdup_printf(\"-M %s%s%s -device pc-testdev\",\n- test->machine,\n- test->superio ? \" -device \" : \"\",\n- test->superio ?: \"\");\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M %s%s%s -device pc-testdev\",\n+ test->machine,\n+ test->superio ? \" -device \" : \"\",\n+ test->superio ?: \"\");\n isa_outl(test, 0xe0, 0x87654321);\n g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87654321);\n g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765);\n@@ -277,7 +269,6 @@ static void test_endianness_combine(gconstpointer data)\n g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765);\n g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4321);\n qtest_quit(global_qtest);\n- g_free(args);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/es1370-test.c b/tests/es1370-test.c\nindex 199fe193ce..edeea13ae7 100644\n--- a/tests/es1370-test.c\n+++ b/tests/es1370-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/es1370/nop\", nop);\n\n- qtest_start(\"-device ES1370\");\n+ global_qtest = qtest_init(\"-device ES1370\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/fdc-test.c b/tests/fdc-test.c\nindex 325712e0f2..893097f5a3 100644\n--- a/tests/fdc-test.c\n+++ b/tests/fdc-test.c\n@@ -564,7 +564,7 @@ int main(int argc, char **argv)\n /* Run the tests */\n g_test_init(&argc, &argv, NULL);\n\n- qtest_start(\"-device floppy,id=floppy0\");\n+ global_qtest = qtest_init(\"-device floppy,id=floppy0\");\n qtest_irq_intercept_in(global_qtest, \"ioapic\");\n qtest_add_func(\"/fdc/cmos\", test_cmos);\n qtest_add_func(\"/fdc/no_media_on_start\", test_no_media_on_start);\n@@ -583,7 +583,7 @@ int main(int argc, char **argv)\n ret = g_test_run();\n\n /* Cleanup */\n- qtest_end();\n+ qtest_quit(global_qtest);\n unlink(test_image);\n\n return ret;\ndiff --git a/tests/hd-geo-test.c b/tests/hd-geo-test.c\nindex 24870b38f4..e0b19cdf17 100644\n--- a/tests/hd-geo-test.c\n+++ b/tests/hd-geo-test.c\n@@ -241,11 +241,11 @@ static void test_ide_none(void)\n\n setup_common(argv, ARGV_SIZE);\n args = g_strjoinv(\" \", argv);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"%s\", args);\n g_strfreev(argv);\n g_free(args);\n test_cmos();\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_ide_mbr(bool use_device, MBRcontents mbr)\n@@ -263,11 +263,11 @@ static void test_ide_mbr(bool use_device, MBRcontents mbr)\n argc = setup_ide(argc, argv, ARGV_SIZE, i, dev, i, mbr, \"\");\n }\n args = g_strjoinv(\" \", argv);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"%s\", args);\n g_strfreev(argv);\n g_free(args);\n test_cmos();\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n /*\n@@ -339,11 +339,11 @@ static void test_ide_drive_user(const char *dev, bool trans)\n dev ? \"\" : opts);\n g_free(opts);\n args = g_strjoinv(\" \", argv);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"%s\", args);\n g_strfreev(argv);\n g_free(args);\n test_cmos();\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n /*\n@@ -396,11 +396,11 @@ static void test_ide_drive_cd_0(void)\n ide_idx, NULL, i, mbr_blank, \"\");\n }\n args = g_strjoinv(\" \", argv);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"%s\", args);\n g_strfreev(argv);\n g_free(args);\n test_cmos();\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/i440fx-test.c b/tests/i440fx-test.c\nindex 4390e5591e..bfedd5d953 100644\n--- a/tests/i440fx-test.c\n+++ b/tests/i440fx-test.c\n@@ -33,11 +33,7 @@ typedef struct FirmwareTestFixture {\n\n static QPCIBus *test_start_get_bus(const TestData *s)\n {\n- char *cmdline;\n-\n- cmdline = g_strdup_printf(\"-smp %d\", s->num_cpus);\n- qtest_start(cmdline);\n- g_free(cmdline);\n+ global_qtest = qtest_init(\"-smp %d\", s->num_cpus);\n return qpci_init_pc(global_qtest, NULL);\n }\n\n@@ -136,7 +132,7 @@ static void test_i440fx_defaults(gconstpointer opaque)\n\n g_free(dev);\n qpci_free_pc(bus);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n #define PAM_RE 1\n@@ -275,7 +271,7 @@ static void test_i440fx_pam(gconstpointer opaque)\n\n g_free(dev);\n qpci_free_pc(bus);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n #define BLOB_SIZE ((size_t)65536)\n@@ -344,10 +340,10 @@ static void test_i440fx_firmware(FirmwareTestFixture *fixture,\n : \"-drive if=pflash,format=raw,file=\",\n fw_pathname);\n g_test_message(\"qemu cmdline: %s\", cmdline);\n- qtest_start(cmdline);\n+ global_qtest = qtest_init(\"%s\", cmdline);\n g_free(cmdline);\n\n- /* QEMU has loaded the firmware (because qtest_start() only returns after\n+ /* QEMU has loaded the firmware (because qtest_init() only returns after\n * the QMP handshake completes). We must unlink the firmware blob right\n * here, because any assertion firing below would leak it in the\n * filesystem. This is also the reason why we recreate the blob every time\n@@ -373,7 +369,7 @@ static void test_i440fx_firmware(FirmwareTestFixture *fixture,\n }\n\n g_free(buf);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void add_firmware_test(const char *testpath,\ndiff --git a/tests/i82801b11-test.c b/tests/i82801b11-test.c\nindex a6e31594c9..58436172b7 100644\n--- a/tests/i82801b11-test.c\n+++ b/tests/i82801b11-test.c\n@@ -22,10 +22,11 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/i82801b11/nop\", nop);\n\n- qtest_start(\"-machine q35 -device i82801b11-bridge,bus=pcie.0,addr=1e.0\");\n+ global_qtest = qtest_init(\"-machine q35 \"\n+ \"-device i82801b11-bridge,bus=pcie.0,addr=1e.0\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/ide-test.c b/tests/ide-test.c\nindex 084f6a5f96..b22a4fc1c5 100644\n--- a/tests/ide-test.c\n+++ b/tests/ide-test.c\n@@ -124,7 +124,7 @@ static void ide_test_start(const char *cmdline_fmt, ...)\n cmdline = g_strdup_vprintf(cmdline_fmt, ap);\n va_end(ap);\n\n- qtest_start(cmdline);\n+ global_qtest = qtest_init(\"%s\", cmdline);\n guest_malloc = pc_alloc_init(global_qtest);\n\n g_free(cmdline);\n@@ -134,7 +134,7 @@ static void ide_test_quit(void)\n {\n pc_alloc_uninit(guest_malloc);\n guest_malloc = NULL;\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static QPCIDevice *get_pci_device(QPCIBar *bmdma_bar, QPCIBar *ide_bar)\ndiff --git a/tests/intel-hda-test.c b/tests/intel-hda-test.c\nindex b782b2e944..c10a59d932 100644\n--- a/tests/intel-hda-test.c\n+++ b/tests/intel-hda-test.c\n@@ -18,15 +18,16 @@\n /* Tests only initialization so far. TODO: Replace with functional tests */\n static void ich6_test(void)\n {\n- qtest_start(\"-device intel-hda,id=\" HDA_ID CODEC_DEVICES);\n- qtest_end();\n+ global_qtest = qtest_init(\"-device intel-hda,id=\" HDA_ID CODEC_DEVICES);\n+ qtest_quit(global_qtest);\n }\n\n static void ich9_test(void)\n {\n- qtest_start(\"-machine q35 -device ich9-intel-hda,bus=pcie.0,addr=1b.0,id=\"\n- HDA_ID CODEC_DEVICES);\n- qtest_end();\n+ global_qtest = qtest_init(\n+ \"-machine q35 -device ich9-intel-hda,bus=pcie.0,addr=1b.0,id=\"\n+ HDA_ID CODEC_DEVICES);\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/ioh3420-test.c b/tests/ioh3420-test.c\nindex b54c4b9f11..cd5d062370 100644\n--- a/tests/ioh3420-test.c\n+++ b/tests/ioh3420-test.c\n@@ -22,11 +22,12 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/ioh3420/nop\", nop);\n\n- qtest_start(\"-machine q35 -device ioh3420,bus=pcie.0,addr=1c.0,port=1,\"\n- \"chassis=1,multifunction=on\");\n+ global_qtest = qtest_init(\n+ \"-machine q35 -device ioh3420,bus=pcie.0,addr=1c.0,port=1,\"\n+ \"chassis=1,multifunction=on\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/ipmi-bt-test.c b/tests/ipmi-bt-test.c\nindex 7e21a9bbcb..476d527cfd 100644\n--- a/tests/ipmi-bt-test.c\n+++ b/tests/ipmi-bt-test.c\n@@ -401,7 +401,6 @@ static void open_socket(void)\n int main(int argc, char **argv)\n {\n const char *arch = qtest_get_arch();\n- char *cmdline;\n int ret;\n\n /* Check architecture */\n@@ -415,12 +414,10 @@ int main(int argc, char **argv)\n /* Run the tests */\n g_test_init(&argc, &argv, NULL);\n\n- cmdline = g_strdup_printf(\n- \" -chardev socket,id=ipmi0,host=localhost,port=%d,reconnect=10\"\n- \" -device ipmi-bmc-extern,chardev=ipmi0,id=bmc0\"\n- \" -device isa-ipmi-bt,bmc=bmc0\", emu_port);\n- qtest_start(cmdline);\n- g_free(cmdline);\n+ global_qtest = qtest_init(\n+ \" -chardev socket,id=ipmi0,host=localhost,port=%d,reconnect=10\"\n+ \" -device ipmi-bmc-extern,chardev=ipmi0,id=bmc0\"\n+ \" -device isa-ipmi-bt,bmc=bmc0\", emu_port);\n qtest_irq_intercept_in(global_qtest, \"ioapic\");\n qtest_add_func(\"/ipmi/extern/connect\", test_connect);\n qtest_add_func(\"/ipmi/extern/bt_base\", test_bt_base);\ndiff --git a/tests/ipmi-kcs-test.c b/tests/ipmi-kcs-test.c\nindex 178ffc1797..2bd3771e9f 100644\n--- a/tests/ipmi-kcs-test.c\n+++ b/tests/ipmi-kcs-test.c\n@@ -264,7 +264,6 @@ static void test_enable_irq(void)\n int main(int argc, char **argv)\n {\n const char *arch = qtest_get_arch();\n- char *cmdline;\n int ret;\n\n /* Check architecture */\n@@ -276,10 +275,8 @@ int main(int argc, char **argv)\n /* Run the tests */\n g_test_init(&argc, &argv, NULL);\n\n- cmdline = g_strdup_printf(\"-device ipmi-bmc-sim,id=bmc0\"\n+ global_qtest = qtest_init(\"-device ipmi-bmc-sim,id=bmc0\"\n \" -device isa-ipmi-kcs,bmc=bmc0\");\n- qtest_start(cmdline);\n- g_free(cmdline);\n qtest_irq_intercept_in(global_qtest, \"ioapic\");\n qtest_add_func(\"/ipmi/local/kcs_base\", test_kcs_base);\n qtest_add_func(\"/ipmi/local/kcs_abort\", test_kcs_abort);\ndiff --git a/tests/ipoctal232-test.c b/tests/ipoctal232-test.c\nindex 684914164d..5e1cae3917 100644\n--- a/tests/ipoctal232-test.c\n+++ b/tests/ipoctal232-test.c\n@@ -22,10 +22,11 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/ipoctal232/tpci200/nop\", nop);\n\n- qtest_start(\"-device tpci200,id=ipack0 -device ipoctal232,bus=ipack0.0\");\n+ global_qtest = qtest_init(\"-device tpci200,id=ipack0 \"\n+ \"-device ipoctal232,bus=ipack0.0\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/ivshmem-test.c b/tests/ivshmem-test.c\nindex b9e0f573f6..f254f09487 100644\n--- a/tests/ivshmem-test.c\n+++ b/tests/ivshmem-test.c\n@@ -407,7 +407,7 @@ static void test_ivshmem_hotplug(void)\n const char *arch = qtest_get_arch();\n gchar *opts;\n\n- qtest_start(\"\");\n+ global_qtest = qtest_init(\" \");\n\n opts = g_strdup_printf(\"'shm': '%s', 'size': '1M'\", tmpshm);\n\n@@ -416,7 +416,7 @@ static void test_ivshmem_hotplug(void)\n qpci_unplug_acpi_device_test(\"iv1\", PCI_SLOT_HP);\n }\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(opts);\n }\n\ndiff --git a/tests/libqos/libqos.c b/tests/libqos/libqos.c\nindex 24e8156fe2..bd9106a132 100644\n--- a/tests/libqos/libqos.c\n+++ b/tests/libqos/libqos.c\n@@ -20,7 +20,7 @@ QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap)\n struct QOSState *qs = g_malloc(sizeof(QOSState));\n\n cmdline = g_strdup_vprintf(cmdline_fmt, ap);\n- qs->qts = qtest_start(cmdline);\n+ qs->qts = global_qtest = qtest_init(\"%s\", cmdline);\n qs->ops = ops;\n if (ops) {\n if (ops->init_allocator) {\ndiff --git a/tests/m25p80-test.c b/tests/m25p80-test.c\nindex 244aa33dd9..18135cfb86 100644\n--- a/tests/m25p80-test.c\n+++ b/tests/m25p80-test.c\n@@ -354,7 +354,6 @@ int main(int argc, char **argv)\n {\n int ret;\n int fd;\n- char *args;\n\n g_test_init(&argc, &argv, NULL);\n\n@@ -364,10 +363,9 @@ int main(int argc, char **argv)\n g_assert(ret == 0);\n close(fd);\n\n- args = g_strdup_printf(\"-m 256 -machine palmetto-bmc \"\n- \"-drive file=%s,format=raw,if=mtd\",\n- tmp_path);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-m 256 -machine palmetto-bmc \"\n+ \"-drive file=%s,format=raw,if=mtd\",\n+ tmp_path);\n\n qtest_add_func(\"/m25p80/read_jedec\", test_read_jedec);\n qtest_add_func(\"/m25p80/erase_sector\", test_erase_sector);\n@@ -380,6 +378,5 @@ int main(int argc, char **argv)\n\n qtest_quit(global_qtest);\n unlink(tmp_path);\n- g_free(args);\n return ret;\n }\ndiff --git a/tests/m48t59-test.c b/tests/m48t59-test.c\nindex 0f921ef38a..52c61fe33e 100644\n--- a/tests/m48t59-test.c\n+++ b/tests/m48t59-test.c\n@@ -246,7 +246,7 @@ int main(int argc, char **argv)\n\n g_test_init(&argc, &argv, NULL);\n\n- s = qtest_start(\"-rtc clock=vm\");\n+ s = global_qtest = qtest_init(\"-rtc clock=vm\");\n\n qtest_add_func(\"/rtc/bcd/check-time\", bcd_check_time);\n qtest_add_func(\"/rtc/fuzz-registers\", fuzz_registers);\ndiff --git a/tests/ne2000-test.c b/tests/ne2000-test.c\nindex b7cf3dd2f5..d205bc91a6 100644\n--- a/tests/ne2000-test.c\n+++ b/tests/ne2000-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/ne2000/pci/nop\", pci_nop);\n\n- qtest_start(\"-device ne2k_pci\");\n+ global_qtest = qtest_init(\"-device ne2k_pci\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/numa-test.c b/tests/numa-test.c\nindex e1b6152244..17bbc0f5f8 100644\n--- a/tests/numa-test.c\n+++ b/tests/numa-test.c\n@@ -25,14 +25,14 @@ static void test_mon_explicit(const void *data)\n cli = make_cli(data, \"-smp 8 \"\n \"-numa node,nodeid=0,cpus=0-3 \"\n \"-numa node,nodeid=1,cpus=4-7 \");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n\n s = hmp(\"info numa\");\n g_assert(strstr(s, \"node 0 cpus: 0 1 2 3\"));\n g_assert(strstr(s, \"node 1 cpus: 4 5 6 7\"));\n g_free(s);\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\n@@ -42,14 +42,14 @@ static void test_mon_default(const void *data)\n char *cli;\n\n cli = make_cli(data, \"-smp 8 -numa node -numa node\");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n\n s = hmp(\"info numa\");\n g_assert(strstr(s, \"node 0 cpus: 0 2 4 6\"));\n g_assert(strstr(s, \"node 1 cpus: 1 3 5 7\"));\n g_free(s);\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\n@@ -61,14 +61,14 @@ static void test_mon_partial(const void *data)\n cli = make_cli(data, \"-smp 8 \"\n \"-numa node,nodeid=0,cpus=0-1 \"\n \"-numa node,nodeid=1,cpus=4-5 \");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n\n s = hmp(\"info numa\");\n g_assert(strstr(s, \"node 0 cpus: 0 1 2 3 6 7\"));\n g_assert(strstr(s, \"node 1 cpus: 4 5\"));\n g_free(s);\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\n@@ -88,7 +88,7 @@ static void test_query_cpus(const void *data)\n QObject *e;\n\n cli = make_cli(data, \"-smp 8 -numa node,cpus=0-3 -numa node,cpus=4-7\");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n cpus = get_cpus(&resp);\n g_assert(cpus);\n\n@@ -113,7 +113,7 @@ static void test_query_cpus(const void *data)\n }\n\n QDECREF(resp);\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\n@@ -130,7 +130,7 @@ static void pc_numa_cpu(const void *data)\n \"-numa cpu,node-id=0,socket-id=1,core-id=0 \"\n \"-numa cpu,node-id=0,socket-id=1,core-id=1,thread-id=0 \"\n \"-numa cpu,node-id=1,socket-id=1,core-id=1,thread-id=1\");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n cpus = get_cpus(&resp);\n g_assert(cpus);\n\n@@ -166,7 +166,7 @@ static void pc_numa_cpu(const void *data)\n }\n\n QDECREF(resp);\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\n@@ -183,7 +183,7 @@ static void spapr_numa_cpu(const void *data)\n \"-numa cpu,node-id=0,core-id=1 \"\n \"-numa cpu,node-id=0,core-id=2 \"\n \"-numa cpu,node-id=1,core-id=3\");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n cpus = get_cpus(&resp);\n g_assert(cpus);\n\n@@ -211,7 +211,7 @@ static void spapr_numa_cpu(const void *data)\n }\n\n QDECREF(resp);\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\n@@ -226,7 +226,7 @@ static void aarch64_numa_cpu(const void *data)\n \"-numa node,nodeid=0 -numa node,nodeid=1 \"\n \"-numa cpu,node-id=1,thread-id=0 \"\n \"-numa cpu,node-id=0,thread-id=1\");\n- qtest_start(cli);\n+ global_qtest = qtest_init(\"%s\", cli);\n cpus = get_cpus(&resp);\n g_assert(cpus);\n\n@@ -254,7 +254,7 @@ static void aarch64_numa_cpu(const void *data)\n }\n\n QDECREF(resp);\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(cli);\n }\n\ndiff --git a/tests/nvme-test.c b/tests/nvme-test.c\nindex 7674a446e4..382d26671f 100644\n--- a/tests/nvme-test.c\n+++ b/tests/nvme-test.c\n@@ -22,11 +22,12 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/nvme/nop\", nop);\n\n- qtest_start(\"-drive id=drv0,if=none,file=null-co://,format=raw \"\n- \"-device nvme,drive=drv0,serial=foo\");\n+ global_qtest = qtest_init(\n+ \"-drive id=drv0,if=none,file=null-co://,format=raw \"\n+ \"-device nvme,drive=drv0,serial=foo\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/pc-cpu-test.c b/tests/pc-cpu-test.c\nindex c4211a4e85..9c36051c07 100644\n--- a/tests/pc-cpu-test.c\n+++ b/tests/pc-cpu-test.c\n@@ -26,15 +26,13 @@ typedef struct PCTestData PCTestData;\n static void test_pc_with_cpu_add(gconstpointer data)\n {\n const PCTestData *s = data;\n- char *args;\n QDict *response;\n unsigned int i;\n\n- args = g_strdup_printf(\"-machine %s -cpu %s \"\n- \"-smp sockets=%u,cores=%u,threads=%u,maxcpus=%u\",\n- s->machine, s->cpu_model,\n- s->sockets, s->cores, s->threads, s->maxcpus);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-machine %s -cpu %s \"\n+ \"-smp sockets=%u,cores=%u,threads=%u,maxcpus=%u\",\n+ s->machine, s->cpu_model,\n+ s->sockets, s->cores, s->threads, s->maxcpus);\n\n for (i = s->sockets * s->cores * s->threads; i < s->maxcpus; i++) {\n response = qmp(\"{ 'execute': 'cpu-add',\"\n@@ -44,21 +42,18 @@ static void test_pc_with_cpu_add(gconstpointer data)\n QDECREF(response);\n }\n\n- qtest_end();\n- g_free(args);\n+ qtest_quit(global_qtest);\n }\n\n static void test_pc_without_cpu_add(gconstpointer data)\n {\n const PCTestData *s = data;\n- char *args;\n QDict *response;\n\n- args = g_strdup_printf(\"-machine %s -cpu %s \"\n- \"-smp sockets=%u,cores=%u,threads=%u,maxcpus=%u\",\n- s->machine, s->cpu_model,\n- s->sockets, s->cores, s->threads, s->maxcpus);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-machine %s -cpu %s \"\n+ \"-smp sockets=%u,cores=%u,threads=%u,maxcpus=%u\",\n+ s->machine, s->cpu_model,\n+ s->sockets, s->cores, s->threads, s->maxcpus);\n\n response = qmp(\"{ 'execute': 'cpu-add',\"\n \" 'arguments': { 'id': %d } }\",\n@@ -67,8 +62,7 @@ static void test_pc_without_cpu_add(gconstpointer data)\n g_assert(qdict_haskey(response, \"error\"));\n QDECREF(response);\n\n- qtest_end();\n- g_free(args);\n+ qtest_quit(global_qtest);\n }\n\n static void test_data_free(gpointer data)\ndiff --git a/tests/pcnet-test.c b/tests/pcnet-test.c\nindex efb1ef44e9..23e36da805 100644\n--- a/tests/pcnet-test.c\n+++ b/tests/pcnet-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/pcnet/pci/nop\", pci_nop);\n\n- qtest_start(\"-device pcnet\");\n+ global_qtest = qtest_init(\"-device pcnet\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/pnv-xscom-test.c b/tests/pnv-xscom-test.c\nindex 5adc3fd3a9..852322b3f2 100644\n--- a/tests/pnv-xscom-test.c\n+++ b/tests/pnv-xscom-test.c\n@@ -81,16 +81,11 @@ static void test_xscom_cfam_id(const PnvChip *chip)\n\n static void test_cfam_id(const void *data)\n {\n- char *args;\n const PnvChip *chip = data;\n\n- args = g_strdup_printf(\"-M powernv,accel=tcg -cpu %s\", chip->cpu_model);\n-\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M powernv,accel=tcg -cpu %s\", chip->cpu_model);\n test_xscom_cfam_id(chip);\n qtest_quit(global_qtest);\n-\n- g_free(args);\n }\n\n #define PNV_XSCOM_EX_CORE_BASE(chip, i) \\\n@@ -109,16 +104,11 @@ static void test_xscom_core(const PnvChip *chip)\n\n static void test_core(const void *data)\n {\n- char *args;\n const PnvChip *chip = data;\n\n- args = g_strdup_printf(\"-M powernv,accel=tcg -cpu %s\", chip->cpu_model);\n-\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M powernv,accel=tcg -cpu %s\", chip->cpu_model);\n test_xscom_core(chip);\n qtest_quit(global_qtest);\n-\n- g_free(args);\n }\n\n static void add_test(const char *name, void (*test)(const void *data))\ndiff --git a/tests/prom-env-test.c b/tests/prom-env-test.c\nindex eac207b30e..fffef0b252 100644\n--- a/tests/prom-env-test.c\n+++ b/tests/prom-env-test.c\n@@ -44,21 +44,18 @@ static void check_guest_memory(void)\n\n static void test_machine(const void *machine)\n {\n- char *args;\n const char *extra_args;\n\n /* The pseries firmware boots much faster without the default devices */\n extra_args = strcmp(machine, \"pseries\") == 0 ? \"-nodefaults\" : \"\";\n\n- args = g_strdup_printf(\"-M %s,accel=tcg %s -prom-env 'use-nvramrc?=true' \"\n- \"-prom-env 'nvramrc=%x %x l!' \",\n- (const char *)machine, extra_args, MAGIC, ADDRESS);\n-\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-M %s,accel=tcg %s \"\n+ \"-prom-env 'use-nvramrc?=true' \"\n+ \"-prom-env 'nvramrc=%x %x l!' \",\n+ (const char *)machine, extra_args,\n+ MAGIC, ADDRESS);\n check_guest_memory();\n qtest_quit(global_qtest);\n-\n- g_free(args);\n }\n\n static void add_tests(const char *machines[])\ndiff --git a/tests/pvpanic-test.c b/tests/pvpanic-test.c\nindex 71ebb5c02c..48b71be26f 100644\n--- a/tests/pvpanic-test.c\n+++ b/tests/pvpanic-test.c\n@@ -37,10 +37,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/pvpanic/panic\", test_panic);\n\n- qtest_start(\"-device pvpanic\");\n+ global_qtest = qtest_init(\"-device pvpanic\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/pxe-test.c b/tests/pxe-test.c\nindex e2d3853534..eaad88601a 100644\n--- a/tests/pxe-test.c\n+++ b/tests/pxe-test.c\n@@ -23,17 +23,13 @@ static char disk[] = \"tests/pxe-test-disk-XXXXXX\";\n\n static void test_pxe_one(const char *params, bool ipv6)\n {\n- char *args;\n-\n- args = g_strdup_printf(\"-machine accel=kvm:tcg -nodefaults -boot order=n \"\n- \"-netdev user,id=\" NETNAME \",tftp=./,bootfile=%s,\"\n- \"ipv4=%s,ipv6=%s %s\", disk, ipv6 ? \"off\" : \"on\",\n- ipv6 ? \"on\" : \"off\", params);\n-\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-machine accel=kvm:tcg -nodefaults \"\n+ \"-boot order=n \"\n+ \"-netdev user,id=\" NETNAME \",tftp=./,bootfile=%s,\"\n+ \"ipv4=%s,ipv6=%s %s\", disk, ipv6 ? \"off\" : \"on\",\n+ ipv6 ? \"on\" : \"off\", params);\n boot_sector_test(global_qtest);\n qtest_quit(global_qtest);\n- g_free(args);\n }\n\n static void test_pxe_e1000(void)\ndiff --git a/tests/q35-test.c b/tests/q35-test.c\nindex e149c4c51d..91a189ce62 100644\n--- a/tests/q35-test.c\n+++ b/tests/q35-test.c\n@@ -84,7 +84,7 @@ static void test_smram_lock(void)\n QPCIDevice *pcidev;\n QDict *response;\n\n- qtest_start(\"-M q35\");\n+ global_qtest = qtest_init(\"-M q35\");\n\n pcibus = qpci_init_pc(global_qtest, NULL);\n g_assert(pcibus != NULL);\n@@ -119,7 +119,7 @@ static void test_smram_lock(void)\n g_free(pcidev);\n qpci_free_pc(pcibus);\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_tseg_size(const void *data)\n@@ -141,7 +141,7 @@ static void test_tseg_size(const void *data)\n cmdline = g_strdup_printf(\"-M q35 -m %uM\",\n TSEG_SIZE_TEST_GUEST_RAM_MBYTES);\n }\n- qtest_start(cmdline);\n+ global_qtest = qtest_init(\"%s\", cmdline);\n g_free(cmdline);\n\n /* locate the DRAM controller */\n@@ -185,7 +185,7 @@ static void test_tseg_size(const void *data)\n\n g_free(pcidev);\n qpci_free_pc(pcibus);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/qom-test.c b/tests/qom-test.c\nindex ab0595dc75..5edd735387 100644\n--- a/tests/qom-test.c\n+++ b/tests/qom-test.c\n@@ -90,11 +90,9 @@ static void test_properties(const char *path, bool recurse)\n static void test_machine(gconstpointer data)\n {\n const char *machine = data;\n- char *args;\n QDict *response;\n\n- args = g_strdup_printf(\"-machine %s\", machine);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-machine %s\", machine);\n\n test_properties(\"/machine\", true);\n\n@@ -102,8 +100,7 @@ static void test_machine(gconstpointer data)\n g_assert(qdict_haskey(response, \"return\"));\n QDECREF(response);\n\n- qtest_end();\n- g_free(args);\n+ qtest_quit(global_qtest);\n g_free((void *)machine);\n }\n\ndiff --git a/tests/rtc-test.c b/tests/rtc-test.c\nindex d7a96cbd79..b6058d28f5 100644\n--- a/tests/rtc-test.c\n+++ b/tests/rtc-test.c\n@@ -690,7 +690,7 @@ int main(int argc, char **argv)\n\n g_test_init(&argc, &argv, NULL);\n\n- s = qtest_start(\"-rtc clock=vm\");\n+ s = global_qtest = qtest_init(\"-rtc clock=vm\");\n qtest_irq_intercept_in(s, \"ioapic\");\n\n qtest_add_func(\"/rtc/check-time/bcd\", bcd_check_time);\ndiff --git a/tests/rtl8139-test.c b/tests/rtl8139-test.c\nindex 68bfc42178..dc9935439f 100644\n--- a/tests/rtl8139-test.c\n+++ b/tests/rtl8139-test.c\n@@ -197,7 +197,7 @@ int main(int argc, char **argv)\n {\n int ret;\n\n- qtest_start(\"-device rtl8139\");\n+ global_qtest = qtest_init(\"-device rtl8139\");\n\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/rtl8139/nop\", nop);\n@@ -205,7 +205,7 @@ int main(int argc, char **argv)\n\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/spapr-phb-test.c b/tests/spapr-phb-test.c\nindex d3522ea093..0d26cbda6c 100644\n--- a/tests/spapr-phb-test.c\n+++ b/tests/spapr-phb-test.c\n@@ -25,11 +25,12 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/spapr-phb/device\", test_phb_device);\n\n- qtest_start(\"-device \" TYPE_SPAPR_PCI_HOST_BRIDGE \",index=30\");\n+ global_qtest = qtest_init(\"-device \" TYPE_SPAPR_PCI_HOST_BRIDGE\n+ \",index=30\");\n\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/tco-test.c b/tests/tco-test.c\nindex 0387971953..b2a4baeeef 100644\n--- a/tests/tco-test.c\n+++ b/tests/tco-test.c\n@@ -49,20 +49,18 @@ static void test_end(TestData *d)\n {\n g_free(d->dev);\n qpci_free_pc(d->bus);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_init(TestData *d)\n {\n QTestState *qs;\n- char *s;\n\n- s = g_strdup_printf(\"-machine q35 %s %s\",\n- d->noreboot ? \"\" : \"-global ICH9-LPC.noreboot=false\",\n- !d->args ? \"\" : d->args);\n- qs = qtest_start(s);\n+ qs = qtest_init(\"-machine q35 %s %s\",\n+ d->noreboot ? \"\" : \"-global ICH9-LPC.noreboot=false\",\n+ !d->args ? \"\" : d->args);\n+ global_qtest = qs;\n qtest_irq_intercept_in(qs, \"ioapic\");\n- g_free(s);\n\n d->bus = qpci_init_pc(qs, NULL);\n d->dev = qpci_device_find(d->bus, QPCI_DEVFN(0x1f, 0x00));\ndiff --git a/tests/test-arm-mptimer.c b/tests/test-arm-mptimer.c\nindex cb8f2df914..a4bef2322a 100644\n--- a/tests/test-arm-mptimer.c\n+++ b/tests/test-arm-mptimer.c\n@@ -1097,9 +1097,9 @@ tests_with_prescaler_arg:\n goto tests_with_prescaler_arg;\n }\n\n- qtest_start(\"-machine vexpress-a9\");\n+ global_qtest = qtest_init(\"-machine vexpress-a9\");\n ret = g_test_run();\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/test-filter-mirror.c b/tests/test-filter-mirror.c\nindex d569d27657..9d8608a609 100644\n--- a/tests/test-filter-mirror.c\n+++ b/tests/test-filter-mirror.c\n@@ -18,7 +18,6 @@\n static void test_mirror(void)\n {\n int send_sock[2], recv_sock;\n- char *cmdline;\n uint32_t ret = 0, len = 0;\n char send_buf[] = \"Hello! filter-mirror~\";\n char sock_path[] = \"filter-mirror.XXXXXX\";\n@@ -37,13 +36,12 @@ static void test_mirror(void)\n ret = mkstemp(sock_path);\n g_assert_cmpint(ret, !=, -1);\n\n- cmdline = g_strdup_printf(\"-netdev socket,id=qtest-bn0,fd=%d \"\n- \"-device %s,netdev=qtest-bn0,id=qtest-e0 \"\n- \"-chardev socket,id=mirror0,path=%s,server,nowait \"\n- \"-object filter-mirror,id=qtest-f0,netdev=qtest-bn0,queue=tx,outdev=mirror0 \"\n- , send_sock[1], devstr, sock_path);\n- qtest_start(cmdline);\n- g_free(cmdline);\n+ global_qtest = qtest_init(\n+ \"-netdev socket,id=qtest-bn0,fd=%d \"\n+ \"-device %s,netdev=qtest-bn0,id=qtest-e0 \"\n+ \"-chardev socket,id=mirror0,path=%s,server,nowait \"\n+ \"-object filter-mirror,id=qtest-f0,netdev=qtest-bn0,queue=tx,outdev=mirror0 \"\n+ , send_sock[1], devstr, sock_path);\n\n recv_sock = unix_connect(sock_path, NULL);\n g_assert_cmpint(recv_sock, !=, -1);\n@@ -86,7 +84,7 @@ int main(int argc, char **argv)\n\n qtest_add_func(\"/netfilter/mirror\", test_mirror);\n ret = g_test_run();\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/test-filter-redirector.c b/tests/test-filter-redirector.c\nindex 3afd41110d..b34f8ec2ad 100644\n--- a/tests/test-filter-redirector.c\n+++ b/tests/test-filter-redirector.c\n@@ -70,7 +70,6 @@ static const char *get_devstr(void)\n static void test_redirector_tx(void)\n {\n int backend_sock[2], recv_sock;\n- char *cmdline;\n uint32_t ret = 0, len = 0;\n char send_buf[] = \"Hello!!\";\n char sock_path0[] = \"filter-redirector0.XXXXXX\";\n@@ -87,20 +86,19 @@ static void test_redirector_tx(void)\n ret = mkstemp(sock_path1);\n g_assert_cmpint(ret, !=, -1);\n\n- cmdline = g_strdup_printf(\"-netdev socket,id=qtest-bn0,fd=%d \"\n- \"-device %s,netdev=qtest-bn0,id=qtest-e0 \"\n- \"-chardev socket,id=redirector0,path=%s,server,nowait \"\n- \"-chardev socket,id=redirector1,path=%s,server,nowait \"\n- \"-chardev socket,id=redirector2,path=%s,nowait \"\n- \"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,\"\n- \"queue=tx,outdev=redirector0 \"\n- \"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,\"\n- \"queue=tx,indev=redirector2 \"\n- \"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,\"\n- \"queue=tx,outdev=redirector1 \", backend_sock[1], get_devstr(),\n- sock_path0, sock_path1, sock_path0);\n- qtest_start(cmdline);\n- g_free(cmdline);\n+ global_qtest = qtest_init(\n+ \"-netdev socket,id=qtest-bn0,fd=%d \"\n+ \"-device %s,netdev=qtest-bn0,id=qtest-e0 \"\n+ \"-chardev socket,id=redirector0,path=%s,server,nowait \"\n+ \"-chardev socket,id=redirector1,path=%s,server,nowait \"\n+ \"-chardev socket,id=redirector2,path=%s,nowait \"\n+ \"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,\"\n+ \"queue=tx,outdev=redirector0 \"\n+ \"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,\"\n+ \"queue=tx,indev=redirector2 \"\n+ \"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,\"\n+ \"queue=tx,outdev=redirector1 \", backend_sock[1], get_devstr(),\n+ sock_path0, sock_path1, sock_path0);\n\n recv_sock = unix_connect(sock_path1, NULL);\n g_assert_cmpint(recv_sock, !=, -1);\n@@ -135,13 +133,12 @@ static void test_redirector_tx(void)\n close(recv_sock);\n unlink(sock_path0);\n unlink(sock_path1);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void test_redirector_rx(void)\n {\n int backend_sock[2], send_sock;\n- char *cmdline;\n uint32_t ret = 0, len = 0;\n char send_buf[] = \"Hello!!\";\n char sock_path0[] = \"filter-redirector0.XXXXXX\";\n@@ -158,20 +155,19 @@ static void test_redirector_rx(void)\n ret = mkstemp(sock_path1);\n g_assert_cmpint(ret, !=, -1);\n\n- cmdline = g_strdup_printf(\"-netdev socket,id=qtest-bn0,fd=%d \"\n- \"-device %s,netdev=qtest-bn0,id=qtest-e0 \"\n- \"-chardev socket,id=redirector0,path=%s,server,nowait \"\n- \"-chardev socket,id=redirector1,path=%s,server,nowait \"\n- \"-chardev socket,id=redirector2,path=%s,nowait \"\n- \"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,\"\n- \"queue=rx,indev=redirector0 \"\n- \"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,\"\n- \"queue=rx,outdev=redirector2 \"\n- \"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,\"\n- \"queue=rx,indev=redirector1 \", backend_sock[1], get_devstr(),\n- sock_path0, sock_path1, sock_path0);\n- qtest_start(cmdline);\n- g_free(cmdline);\n+ global_qtest = qtest_init(\n+ \"-netdev socket,id=qtest-bn0,fd=%d \"\n+ \"-device %s,netdev=qtest-bn0,id=qtest-e0 \"\n+ \"-chardev socket,id=redirector0,path=%s,server,nowait \"\n+ \"-chardev socket,id=redirector1,path=%s,server,nowait \"\n+ \"-chardev socket,id=redirector2,path=%s,nowait \"\n+ \"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,\"\n+ \"queue=rx,indev=redirector0 \"\n+ \"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,\"\n+ \"queue=rx,outdev=redirector2 \"\n+ \"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,\"\n+ \"queue=rx,indev=redirector1 \", backend_sock[1], get_devstr(),\n+ sock_path0, sock_path1, sock_path0);\n\n struct iovec iov[] = {\n {\n@@ -204,7 +200,7 @@ static void test_redirector_rx(void)\n g_free(recv_buf);\n unlink(sock_path0);\n unlink(sock_path1);\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/test-hmp.c b/tests/test-hmp.c\nindex 729c0339f7..dd03693707 100644\n--- a/tests/test-hmp.c\n+++ b/tests/test-hmp.c\n@@ -119,16 +119,13 @@ static void test_info_commands(void)\n static void test_machine(gconstpointer data)\n {\n const char *machine = data;\n- char *args;\n\n- args = g_strdup_printf(\"-S -M %s\", machine);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-S -M %s\", machine);\n\n test_info_commands();\n test_commands();\n\n- qtest_end();\n- g_free(args);\n+ qtest_quit(global_qtest);\n g_free((void *)data);\n }\n\ndiff --git a/tests/test-netfilter.c b/tests/test-netfilter.c\nindex 2506473365..76caaedfc1 100644\n--- a/tests/test-netfilter.c\n+++ b/tests/test-netfilter.c\n@@ -182,7 +182,6 @@ static void remove_netdev_with_multi_netfilter(void)\n int main(int argc, char **argv)\n {\n int ret;\n- char *args;\n const char *devstr = \"e1000\";\n\n if (g_str_equal(qtest_get_arch(), \"s390x\")) {\n@@ -197,13 +196,11 @@ int main(int argc, char **argv)\n qtest_add_func(\"/netfilter/remove_netdev_multi\",\n remove_netdev_with_multi_netfilter);\n\n- args = g_strdup_printf(\"-netdev user,id=qtest-bn0 \"\n- \"-device %s,netdev=qtest-bn0\", devstr);\n- qtest_start(args);\n+ global_qtest = qtest_init(\"-netdev user,id=qtest-bn0 \"\n+ \"-device %s,netdev=qtest-bn0\", devstr);\n ret = g_test_run();\n\n- qtest_end();\n- g_free(args);\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/test-x86-cpuid-compat.c b/tests/test-x86-cpuid-compat.c\nindex 58a2dd9fe8..5b026ac38a 100644\n--- a/tests/test-x86-cpuid-compat.c\n+++ b/tests/test-x86-cpuid-compat.c\n@@ -59,12 +59,12 @@ static void test_cpuid_prop(const void *data)\n QNum *value;\n int64_t val;\n\n- qtest_start(args->cmdline);\n+ global_qtest = qtest_init(\"%s\", args->cmdline);\n path = get_cpu0_qom_path();\n value = qobject_to_qnum(qom_get(path, args->property));\n g_assert(qnum_get_try_int(value, &val));\n g_assert_cmpint(val, ==, args->expected_value);\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n QDECREF(value);\n g_free(path);\n@@ -131,13 +131,13 @@ static void test_feature_flag(const void *data)\n QList *present, *filtered;\n uint32_t value;\n\n- qtest_start(args->cmdline);\n+ global_qtest = qtest_init(\"%s\", args->cmdline);\n path = get_cpu0_qom_path();\n present = qobject_to_qlist(qom_get(path, \"feature-words\"));\n filtered = qobject_to_qlist(qom_get(path, \"filtered-features\"));\n value = get_feature_word(present, args->in_eax, args->in_ecx, args->reg);\n value |= get_feature_word(filtered, args->in_eax, args->in_ecx, args->reg);\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n g_assert(!!(value & (1U << args->bitnr)) == args->expected_value);\n\n@@ -181,7 +181,8 @@ static void test_plus_minus_subprocess(void)\n * Note: rules 1 and 2 are planned to be removed soon, and\n * should generate a warning.\n */\n- qtest_start(\"-cpu pentium,-fpu,+fpu,-mce,mce=on,+cx8,cx8=off,+sse4_1,sse4_2=on\");\n+ global_qtest = qtest_init(\"-cpu pentium,-fpu,+fpu,-mce,mce=on,+cx8,\"\n+ \"cx8=off,+sse4_1,sse4_2=on\");\n path = get_cpu0_qom_path();\n\n g_assert_false(qom_get_bool(path, \"fpu\"));\n@@ -195,7 +196,7 @@ static void test_plus_minus_subprocess(void)\n g_assert_true(qom_get_bool(path, \"sse4-2\"));\n g_assert_true(qom_get_bool(path, \"sse4.2\"));\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n g_free(path);\n }\n\ndiff --git a/tests/tmp105-test.c b/tests/tmp105-test.c\nindex a7940a4639..3ef2efff6e 100644\n--- a/tests/tmp105-test.c\n+++ b/tests/tmp105-test.c\n@@ -151,7 +151,7 @@ int main(int argc, char **argv)\n\n g_test_init(&argc, &argv, NULL);\n\n- s = qtest_start(\"-machine n800 \"\n+ s = global_qtest = qtest_init(\"-machine n800 \"\n \"-device tmp105,bus=i2c-bus.0,id=\" TMP105_TEST_ID\n \",address=0x49\");\n i2c = omap_i2c_create(OMAP2_I2C_1_BASE);\ndiff --git a/tests/tpci200-test.c b/tests/tpci200-test.c\nindex 0321ec27ec..2ed378196d 100644\n--- a/tests/tpci200-test.c\n+++ b/tests/tpci200-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/tpci200/nop\", nop);\n\n- qtest_start(\"-device tpci200\");\n+ global_qtest = qtest_init(\"-device tpci200\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/usb-hcd-ehci-test.c b/tests/usb-hcd-ehci-test.c\nindex 55d4743a2a..55349a39a2 100644\n--- a/tests/usb-hcd-ehci-test.c\n+++ b/tests/usb-hcd-ehci-test.c\n@@ -156,23 +156,24 @@ int main(int argc, char **argv)\n qtest_add_func(\"/ehci/pci/ehci-port-2\", pci_ehci_port_2);\n qtest_add_func(\"/ehci/pci/ehci-port-3-hotplug\", pci_ehci_port_hotplug);\n\n- qtest_start(\"-machine q35 -device ich9-usb-ehci1,bus=pcie.0,addr=1d.7,\"\n- \"multifunction=on,id=ich9-ehci-1 \"\n- \"-device ich9-usb-uhci1,bus=pcie.0,addr=1d.0,\"\n- \"multifunction=on,masterbus=ich9-ehci-1.0,firstport=0 \"\n- \"-device ich9-usb-uhci2,bus=pcie.0,addr=1d.1,\"\n- \"multifunction=on,masterbus=ich9-ehci-1.0,firstport=2 \"\n- \"-device ich9-usb-uhci3,bus=pcie.0,addr=1d.2,\"\n- \"multifunction=on,masterbus=ich9-ehci-1.0,firstport=4 \"\n- \"-drive if=none,id=usbcdrom,media=cdrom \"\n- \"-device usb-tablet,bus=ich9-ehci-1.0,port=1,usb_version=1 \"\n- \"-device usb-storage,bus=ich9-ehci-1.0,port=2,drive=usbcdrom \");\n+ global_qtest = qtest_init(\n+ \"-machine q35 -device ich9-usb-ehci1,bus=pcie.0,addr=1d.7,\"\n+ \"multifunction=on,id=ich9-ehci-1 \"\n+ \"-device ich9-usb-uhci1,bus=pcie.0,addr=1d.0,\"\n+ \"multifunction=on,masterbus=ich9-ehci-1.0,firstport=0 \"\n+ \"-device ich9-usb-uhci2,bus=pcie.0,addr=1d.1,\"\n+ \"multifunction=on,masterbus=ich9-ehci-1.0,firstport=2 \"\n+ \"-device ich9-usb-uhci3,bus=pcie.0,addr=1d.2,\"\n+ \"multifunction=on,masterbus=ich9-ehci-1.0,firstport=4 \"\n+ \"-drive if=none,id=usbcdrom,media=cdrom \"\n+ \"-device usb-tablet,bus=ich9-ehci-1.0,port=1,usb_version=1 \"\n+ \"-device usb-storage,bus=ich9-ehci-1.0,port=2,drive=usbcdrom \");\n\n test_init();\n ret = g_test_run();\n test_deinit();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/usb-hcd-ohci-test.c b/tests/usb-hcd-ohci-test.c\nindex 4758813d78..2763c9ec24 100644\n--- a/tests/usb-hcd-ohci-test.c\n+++ b/tests/usb-hcd-ohci-test.c\n@@ -31,9 +31,9 @@ int main(int argc, char **argv)\n qtest_add_func(\"/ohci/pci/init\", test_ohci_init);\n qtest_add_func(\"/ohci/pci/hotplug\", test_ohci_hotplug);\n\n- qtest_start(\"-device pci-ohci,id=ohci\");\n+ global_qtest = qtest_init(\"-device pci-ohci,id=ohci\");\n ret = g_test_run();\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/usb-hcd-xhci-test.c b/tests/usb-hcd-xhci-test.c\nindex c05a339894..cc3fcd82fa 100644\n--- a/tests/usb-hcd-xhci-test.c\n+++ b/tests/usb-hcd-xhci-test.c\n@@ -80,10 +80,10 @@ int main(int argc, char **argv)\n qtest_add_func(\"/xhci/pci/hotplug\", test_xhci_hotplug);\n qtest_add_func(\"/xhci/pci/hotplug/usb-uas\", test_usb_uas_hotplug);\n\n- qtest_start(\"-device nec-usb-xhci,id=xhci\"\n+ global_qtest = qtest_init(\"-device nec-usb-xhci,id=xhci\"\n \" -drive id=drive0,if=none,file=null-co://,format=raw\");\n ret = g_test_run();\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/virtio-balloon-test.c b/tests/virtio-balloon-test.c\nindex 0d0046bf25..7304392c17 100644\n--- a/tests/virtio-balloon-test.c\n+++ b/tests/virtio-balloon-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/virtio/balloon/pci/nop\", pci_nop);\n\n- qtest_start(\"-device virtio-balloon-pci\");\n+ global_qtest = qtest_init(\"-device virtio-balloon-pci\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c\nindex 26d0a7e9af..063b0f4013 100644\n--- a/tests/virtio-blk-test.c\n+++ b/tests/virtio-blk-test.c\n@@ -84,24 +84,21 @@ static QOSState *pci_test_start(void)\n\n static void arm_test_start(void)\n {\n- char *cmdline;\n char *tmp_path;\n\n tmp_path = drive_create();\n\n- cmdline = g_strdup_printf(\"-machine virt \"\n- \"-drive if=none,id=drive0,file=%s,format=raw \"\n- \"-device virtio-blk-device,drive=drive0\",\n- tmp_path);\n- qtest_start(cmdline);\n+ global_qtest = qtest_init(\"-machine virt \"\n+ \"-drive if=none,id=drive0,file=%s,format=raw \"\n+ \"-device virtio-blk-device,drive=drive0\",\n+ tmp_path);\n unlink(tmp_path);\n g_free(tmp_path);\n- g_free(cmdline);\n }\n\n static void test_end(void)\n {\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static QVirtioPCIDevice *virtio_blk_pci_init(QPCIBus *bus, int slot)\ndiff --git a/tests/virtio-console-test.c b/tests/virtio-console-test.c\nindex 1c3de072f4..73fb30b051 100644\n--- a/tests/virtio-console-test.c\n+++ b/tests/virtio-console-test.c\n@@ -13,16 +13,16 @@\n /* Tests only initialization so far. TODO: Replace with functional tests */\n static void console_pci_nop(void)\n {\n- qtest_start(\"-device virtio-serial-pci,id=vser0 \"\n+ global_qtest = qtest_init(\"-device virtio-serial-pci,id=vser0 \"\n \"-device virtconsole,bus=vser0.0\");\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n static void serialport_pci_nop(void)\n {\n- qtest_start(\"-device virtio-serial-pci,id=vser0 \"\n+ global_qtest = qtest_init(\"-device virtio-serial-pci,id=vser0 \"\n \"-device virtserialport,bus=vser0.0\");\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/virtio-net-test.c b/tests/virtio-net-test.c\nindex 635b942c36..9b32866fb1 100644\n--- a/tests/virtio-net-test.c\n+++ b/tests/virtio-net-test.c\n@@ -30,7 +30,7 @@\n\n static void test_end(void)\n {\n- qtest_end();\n+ qtest_quit(global_qtest);\n }\n\n #ifndef _WIN32\n@@ -243,7 +243,7 @@ static void hotplug(void)\n {\n const char *arch = qtest_get_arch();\n\n- qtest_start(\"-device virtio-net-pci\");\n+ global_qtest = qtest_init(\"-device virtio-net-pci\");\n\n qpci_plug_device_test(\"virtio-net-pci\", \"net1\", PCI_SLOT_HP, NULL);\n\ndiff --git a/tests/virtio-rng-test.c b/tests/virtio-rng-test.c\nindex dcecf77463..e1b1e89b59 100644\n--- a/tests/virtio-rng-test.c\n+++ b/tests/virtio-rng-test.c\n@@ -37,10 +37,10 @@ int main(int argc, char **argv)\n qtest_add_func(\"/virtio/rng/pci/nop\", pci_nop);\n qtest_add_func(\"/virtio/rng/pci/hotplug\", hotplug);\n\n- qtest_start(\"-device virtio-rng-pci\");\n+ global_qtest = qtest_init(\"-device virtio-rng-pci\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/virtio-serial-test.c b/tests/virtio-serial-test.c\nindex b14d943ada..ce708cc11e 100644\n--- a/tests/virtio-serial-test.c\n+++ b/tests/virtio-serial-test.c\n@@ -49,10 +49,10 @@ int main(int argc, char **argv)\n qtest_add_func(\"/virtio/serial/pci/nop\", pci_nop);\n qtest_add_func(\"/virtio/serial/pci/hotplug\", hotplug);\n\n- qtest_start(\"-device virtio-serial-pci\");\n+ global_qtest = qtest_init(\"-device virtio-serial-pci\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\ndiff --git a/tests/vmgenid-test.c b/tests/vmgenid-test.c\nindex 73473162d0..b149690a1a 100644\n--- a/tests/vmgenid-test.c\n+++ b/tests/vmgenid-test.c\n@@ -130,41 +130,32 @@ static void read_guid_from_monitor(QemuUUID *guid)\n\n static char disk[] = \"tests/vmgenid-test-disk-XXXXXX\";\n\n-static char *guid_cmd_strdup(const char *guid)\n-{\n- return g_strdup_printf(\"-machine accel=kvm:tcg \"\n- \"-device vmgenid,id=testvgid,guid=%s \"\n- \"-drive id=hd0,if=none,file=%s,format=raw \"\n- \"-device ide-hd,drive=hd0 \",\n- guid, disk);\n-}\n-\n+#define GUID_CMD(guid) \\\n+ \"-machine accel=kvm:tcg \" \\\n+ \"-device vmgenid,id=testvgid,guid=%s \" \\\n+ \"-drive id=hd0,if=none,file=%s,format=raw \" \\\n+ \"-device ide-hd,drive=hd0 \", guid, disk\n\n static void vmgenid_set_guid_test(void)\n {\n QemuUUID expected, measured;\n- gchar *cmd;\n\n g_assert(qemu_uuid_parse(VGID_GUID, &expected) == 0);\n\n- cmd = guid_cmd_strdup(VGID_GUID);\n- qtest_start(cmd);\n+ global_qtest = qtest_init(GUID_CMD(VGID_GUID));\n\n /* Read the GUID from accessing guest memory */\n read_guid_from_memory(&measured);\n g_assert(memcmp(measured.data, expected.data, sizeof(measured.data)) == 0);\n\n qtest_quit(global_qtest);\n- g_free(cmd);\n }\n\n static void vmgenid_set_guid_auto_test(void)\n {\n- char *cmd;\n QemuUUID measured;\n\n- cmd = guid_cmd_strdup(\"auto\");\n- qtest_start(cmd);\n+ global_qtest = qtest_init(GUID_CMD(\"auto\"));\n\n read_guid_from_memory(&measured);\n\n@@ -172,25 +163,21 @@ static void vmgenid_set_guid_auto_test(void)\n g_assert(!qemu_uuid_is_null(&measured));\n\n qtest_quit(global_qtest);\n- g_free(cmd);\n }\n\n static void vmgenid_query_monitor_test(void)\n {\n QemuUUID expected, measured;\n- gchar *cmd;\n\n g_assert(qemu_uuid_parse(VGID_GUID, &expected) == 0);\n\n- cmd = guid_cmd_strdup(VGID_GUID);\n- qtest_start(cmd);\n+ global_qtest = qtest_init(GUID_CMD(VGID_GUID));\n\n /* Read the GUID via the monitor */\n read_guid_from_monitor(&measured);\n g_assert(memcmp(measured.data, expected.data, sizeof(measured.data)) == 0);\n\n qtest_quit(global_qtest);\n- g_free(cmd);\n }\n\n int main(int argc, char **argv)\ndiff --git a/tests/vmxnet3-test.c b/tests/vmxnet3-test.c\nindex 159c0ad728..c9a876bcd9 100644\n--- a/tests/vmxnet3-test.c\n+++ b/tests/vmxnet3-test.c\n@@ -22,10 +22,10 @@ int main(int argc, char **argv)\n g_test_init(&argc, &argv, NULL);\n qtest_add_func(\"/vmxnet3/nop\", nop);\n\n- qtest_start(\"-device vmxnet3\");\n+ global_qtest = qtest_init(\"-device vmxnet3\");\n ret = g_test_run();\n\n- qtest_end();\n+ qtest_quit(global_qtest);\n\n return ret;\n }\n", "prefixes": [ "v6", "28/29" ] }