QOM/QTest infrastructure fixes

* QOM cast fix for virtserialport and regression test
 * QTest error handling fix
 * QTest output cleanup
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.22 (GNU/Linux)
 
 iQIcBAABAgAGBQJTIhh2AAoJEPou0S0+fgE/6jAP/362k1KrTFe5edcdBEJE6IgI
 FssJBenl/A8eKbfhbeLWK4I3q1RZJb8oDfSVDFpwmgSIknmYFAldDS+Ju/UePX/9
 PikS9CYjBnDMmWBnmFAhgRtCrDq3gazu2c7hicBdnLemFD/1CaBkL65VNIwvXEvY
 KUYtleABUr6YbmjgMYtf8gCUZjYBcI5tw2ZgG6T0jgZRqPPGsEozKxBTctM9PIuW
 LtQdLDvhD2rfJAeDTG4jrTCeDBrgJCs8UGXDaNctMBwsESMQBuCjW0TeVsmdI0Qp
 P/y30N3HDfQfhuMkJk8Udm8iiOs1LX0YNRi08aeHOYxoWb3dc9C3mtLMFU8UYTLP
 ddpJZ5WEOVt42rsZvtmnwdv6kGBkbphcIzCP56eJN0w+HallKQf6qusRH04nO3GM
 ISr+1xIfchl1CzXdP41AiHrodfCDozROhItz+SgIynJGs1kFOETsjJQhHCUutDx+
 u4Y8+NGDVRxd2a0h0eLYwqqt8ObpBs8a0+Xnsr7HEES6zPg0eN7VPe9x3jR3TFZN
 trvKCDiV9zycrC82wlwx6z+KFrFPJE+9yvzGlELyDhw0McBtCpt9VaEk94jEWkK5
 tSs1AsIehAom8oMTZweU28TZwiS4p2bLuJfLlw99E0cnGqOvMr8dmvbcVLOmIPZl
 oFy0sTD3JECuYa1wR8dI
 =WXjm
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-2.0' into staging

QOM/QTest infrastructure fixes

* QOM cast fix for virtserialport and regression test
* QTest error handling fix
* QTest output cleanup

# gpg: Signature made Thu 13 Mar 2014 20:43:34 GMT using RSA key ID 3E7E013F
# gpg: Good signature from "Andreas Färber <afaerber@suse.de>"
# gpg:                 aka "Andreas Färber <afaerber@suse.com>"

* remotes/afaerber/tags/qom-devices-for-2.0:
  main-loop: Suppress "I/O thread spun" warnings for qtest
  qtest: Fix crash if SIGABRT during qtest_init()
  virtio-console-test: Test virtserialport as well
  virtio-console: Fix VIRTIO_CONSOLE() cast macro

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2014-03-13 21:50:39 +00:00
commit b19fc63cad
7 changed files with 39 additions and 29 deletions

View File

@ -15,9 +15,9 @@
#include "trace.h"
#include "hw/virtio/virtio-serial.h"
#define TYPE_VIRTIO_CONSOLE "virtconsole"
#define TYPE_VIRTIO_CONSOLE_SERIAL_PORT "virtserialport"
#define VIRTIO_CONSOLE(obj) \
OBJECT_CHECK(VirtConsole, (obj), TYPE_VIRTIO_CONSOLE)
OBJECT_CHECK(VirtConsole, (obj), TYPE_VIRTIO_CONSOLE_SERIAL_PORT)
typedef struct VirtConsole {
VirtIOSerialPort parent_obj;
@ -154,28 +154,16 @@ static void virtconsole_unrealize(DeviceState *dev, Error **errp)
}
}
static Property virtconsole_properties[] = {
DEFINE_PROP_CHR("chardev", VirtConsole, chr),
DEFINE_PROP_END_OF_LIST(),
};
static void virtconsole_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
VirtIOSerialPortClass *k = VIRTIO_SERIAL_PORT_CLASS(klass);
k->is_console = true;
k->realize = virtconsole_realize;
k->unrealize = virtconsole_unrealize;
k->have_data = flush_buf;
k->set_guest_connected = set_guest_connected;
dc->props = virtconsole_properties;
}
static const TypeInfo virtconsole_info = {
.name = TYPE_VIRTIO_CONSOLE,
.parent = TYPE_VIRTIO_SERIAL_PORT,
.instance_size = sizeof(VirtConsole),
.name = "virtconsole",
.parent = TYPE_VIRTIO_CONSOLE_SERIAL_PORT,
.class_init = virtconsole_class_init,
};
@ -197,7 +185,7 @@ static void virtserialport_class_init(ObjectClass *klass, void *data)
}
static const TypeInfo virtserialport_info = {
.name = "virtserialport",
.name = TYPE_VIRTIO_CONSOLE_SERIAL_PORT,
.parent = TYPE_VIRTIO_SERIAL_PORT,
.instance_size = sizeof(VirtConsole),
.class_init = virtserialport_class_init,
@ -205,8 +193,8 @@ static const TypeInfo virtserialport_info = {
static void virtconsole_register_types(void)
{
type_register_static(&virtconsole_info);
type_register_static(&virtserialport_info);
type_register_static(&virtconsole_info);
}
type_init(virtconsole_register_types)

View File

@ -25,6 +25,7 @@
#include "qemu-common.h"
#include "qemu/timer.h"
#include "qemu/sockets.h" // struct in_addr needed for libslirp.h
#include "sysemu/qtest.h"
#include "slirp/libslirp.h"
#include "qemu/main-loop.h"
#include "block/aio.h"
@ -208,7 +209,7 @@ static int os_host_main_loop_wait(int64_t timeout)
if (!timeout && (spin_counter > MAX_MAIN_LOOP_SPIN)) {
static bool notified;
if (!notified) {
if (!notified && !qtest_enabled()) {
fprintf(stderr,
"main-loop: WARNING: I/O thread spun for %d iterations\n",
MAX_MAIN_LOOP_SPIN);

View File

@ -18,6 +18,7 @@ stub-obj-y += mon-print-filename.o
stub-obj-y += mon-protocol-event.o
stub-obj-y += mon-set-error.o
stub-obj-y += pci-drive-hot-add.o
stub-obj-y += qtest.o
stub-obj-y += reset.o
stub-obj-y += set-fd-handler.o
stub-obj-y += slirp.o

14
stubs/qtest.c Normal file
View File

@ -0,0 +1,14 @@
/*
* qtest stubs
*
* Copyright (c) 2014 Linaro Limited
* Written by Peter Maydell
*
* This work is licensed under the terms of the GNU GPL, version 2 or later.
* See the COPYING file in the top-level directory.
*/
#include "qemu-common.h"
/* Needed for qtest_allowed() */
bool qtest_allowed;

View File

@ -120,7 +120,7 @@ QTestState *qtest_init(const char *extra_args)
qemu_binary = getenv("QTEST_QEMU_BINARY");
g_assert(qemu_binary != NULL);
s = g_malloc(sizeof(*s));
global_qtest = s = g_malloc(sizeof(*s));
socket_path = g_strdup_printf("/tmp/qtest-%d.sock", getpid());
qmp_socket_path = g_strdup_printf("/tmp/qtest-%d.qmp", getpid());
@ -181,6 +181,7 @@ QTestState *qtest_init(const char *extra_args)
void qtest_quit(QTestState *s)
{
sigaction(SIGABRT, &s->sigact_old, NULL);
global_qtest = NULL;
kill_qemu(s);
close(s->fd);

View File

@ -335,8 +335,7 @@ void qtest_add_func(const char *str, void (*fn));
*/
static inline QTestState *qtest_start(const char *args)
{
global_qtest = qtest_init(args);
return global_qtest;
return qtest_init(args);
}
/**
@ -347,7 +346,6 @@ static inline QTestState *qtest_start(const char *args)
static inline void qtest_end(void)
{
qtest_quit(global_qtest);
global_qtest = NULL;
}
/**

View File

@ -13,8 +13,18 @@
#include "qemu/osdep.h"
/* Tests only initialization so far. TODO: Replace with functional tests */
static void pci_nop(void)
static void console_pci_nop(void)
{
qtest_start("-device virtio-serial-pci,id=vser0 "
"-device virtconsole,bus=vser0.0");
qtest_end();
}
static void serialport_pci_nop(void)
{
qtest_start("-device virtio-serial-pci,id=vser0 "
"-device virtserialport,bus=vser0.0");
qtest_end();
}
int main(int argc, char **argv)
@ -22,13 +32,10 @@ int main(int argc, char **argv)
int ret;
g_test_init(&argc, &argv, NULL);
qtest_add_func("/virtio/console/pci/nop", pci_nop);
qtest_add_func("/virtio/console/pci/nop", console_pci_nop);
qtest_add_func("/virtio/serialport/pci/nop", serialport_pci_nop);
qtest_start("-device virtio-serial-pci,id=vser0 "
"-device virtconsole,bus=vser0.0");
ret = g_test_run();
qtest_end();
return ret;
}