mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
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:
@@ -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)
|
||||
|
||||
+2
-1
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
+2
-1
@@ -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);
|
||||
|
||||
+1
-3
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user