[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 32/54] char: remove class kind field
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH 32/54] char: remove class kind field |
Date: |
Tue, 13 Dec 2016 01:43:03 +0300 |
The class kind is only necessary to lookup the chardev name in
qmp_chardev_add() after calling qemu_chr_new_from_opts(). However,
qemu_chr_new_from_opts() can be changed to use a non-qmp function using
the chardev class typename. Introduce qemu_chardev_add() to be called
from qemu_chr_new_from_opts() and remove the class chardev kind field.
Signed-off-by: Marc-André Lureau <address@hidden>
---
backends/baum.c | 1 -
backends/msmouse.c | 1 -
backends/testdev.c | 1 -
qemu-char.c | 96 ++++++++++++++++++++++-----------------------------
spice-qemu-char.c | 2 --
ui/console.c | 1 -
ui/gtk.c | 1 -
include/sysemu/char.h | 1 -
8 files changed, 42 insertions(+), 62 deletions(-)
diff --git a/backends/baum.c b/backends/baum.c
index e4c4c53486..64dbeb1a5f 100644
--- a/backends/baum.c
+++ b/backends/baum.c
@@ -671,7 +671,6 @@ static void char_braille_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_BRAILLE;
cc->open = baum_chr_open;
cc->chr_write = baum_chr_write;
cc->chr_accept_input = baum_chr_accept_input;
diff --git a/backends/msmouse.c b/backends/msmouse.c
index 28689b3e29..d2c3162f1e 100644
--- a/backends/msmouse.c
+++ b/backends/msmouse.c
@@ -169,7 +169,6 @@ static void char_msmouse_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_MSMOUSE;
cc->open = msmouse_chr_open;
cc->chr_write = msmouse_chr_write;
cc->chr_accept_input = msmouse_chr_accept_input;
diff --git a/backends/testdev.c b/backends/testdev.c
index 243454aaa3..7df9248a13 100644
--- a/backends/testdev.c
+++ b/backends/testdev.c
@@ -111,7 +111,6 @@ static void char_testdev_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_TESTDEV;
cc->chr_write = testdev_chr_write;
}
diff --git a/qemu-char.c b/qemu-char.c
index 9a4028059e..4708b85c2e 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -566,7 +566,6 @@ static void char_null_class_init(ObjectClass *oc, void
*data)
cc->open = null_chr_open;
cc->chr_write = null_chr_write;
- cc->kind = CHARDEV_BACKEND_KIND_NULL;
}
static const TypeInfo char_null_type_info = {
@@ -1703,7 +1702,6 @@ static void char_pty_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_PTY;
cc->open = char_pty_open;
cc->chr_write = char_pty_chr_write;
cc->chr_update_read_handler = pty_chr_update_read_handler;
@@ -2453,7 +2451,6 @@ static void char_console_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_CONSOLE;
cc->open = qemu_chr_open_win_con;
}
@@ -3832,7 +3829,6 @@ static void char_stdio_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_STDIO;
cc->parse = qemu_chr_parse_stdio;
cc->open = qemu_chr_open_stdio;
#ifdef _WIN32
@@ -3907,7 +3903,6 @@ static void char_pipe_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_PIPE;
cc->parse = qemu_chr_parse_pipe;
cc->open = qemu_chr_open_pipe;
}
@@ -3942,7 +3937,6 @@ static void char_ringbuf_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_RINGBUF;
cc->parse = qemu_chr_parse_ringbuf;
cc->open = qemu_chr_open_ringbuf;
cc->chr_write = ringbuf_chr_write;
@@ -3957,17 +3951,9 @@ static const TypeInfo char_ringbuf_type_info = {
};
/* Bug-compatibility: */
-static void char_memory_class_init(ObjectClass *oc, void *data)
-{
- ChardevClass *cc = CHARDEV_CLASS(oc);
-
- cc->kind = CHARDEV_BACKEND_KIND_MEMORY;
-}
-
static const TypeInfo char_memory_type_info = {
.name = TYPE_CHARDEV_MEMORY,
.parent = TYPE_CHARDEV_RINGBUF,
- .class_init = char_memory_class_init,
};
static void qemu_chr_parse_mux(QemuOpts *opts, ChardevBackend *backend,
@@ -3989,7 +3975,6 @@ static void char_mux_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_MUX;
cc->parse = qemu_chr_parse_mux;
cc->open = qemu_chr_open_mux;
cc->chr_write = mux_chr_write;
@@ -4161,6 +4146,26 @@ static const ChardevClass *char_get_class(const char
*driver, Error **errp)
return cc;
}
+static Chardev *qemu_chardev_add(const char *id, const char *typename,
+ ChardevBackend *backend, Error **errp)
+{
+ Chardev *chr;
+
+ chr = qemu_chr_find(id);
+ if (chr) {
+ error_setg(errp, "Chardev '%s' already exists", id);
+ return NULL;
+ }
+
+ chr = qemu_chardev_new(id, typename, backend, errp);
+ if (!chr) {
+ return NULL;
+ }
+
+ QTAILQ_INSERT_TAIL(&chardevs, chr, next);
+ return chr;
+}
+
static const struct ChardevAlias {
const char *typename;
const char *alias;
@@ -4180,8 +4185,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
const ChardevClass *cc;
Chardev *chr;
int i;
- ChardevReturn *ret = NULL;
- ChardevBackend *backend;
+ ChardevBackend *backend = NULL;
const char *id = qemu_opts_id(opts);
const char *bname = qemu_opt_get(opts, "backend");
char *bid = NULL;
@@ -4189,7 +4193,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
if (bname == NULL) {
error_setg(errp, "chardev: \"%s\" missing backend",
qemu_opts_id(opts));
- goto err;
+ return NULL;
}
if (is_help_option(bname)) {
@@ -4208,7 +4212,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
if (id == NULL) {
error_setg(errp, "chardev: no id specified");
- goto err;
+ return NULL;
}
for (i = 0; i < ARRAY_SIZE(chardev_alias_table); i++) {
@@ -4220,22 +4224,22 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
cc = char_get_class(bname, errp);
if (cc == NULL) {
- goto err;
+ return NULL;
}
backend = g_new0(ChardevBackend, 1);
+ backend->type = CHARDEV_BACKEND_KIND_NULL;
if (qemu_opt_get_bool(opts, "mux", 0)) {
bid = g_strdup_printf("%s-base", id);
}
chr = NULL;
- backend->type = cc->kind;
if (cc->parse) {
cc->parse(opts, backend, &local_err);
if (local_err) {
error_propagate(errp, local_err);
- goto qapi_out;
+ goto out;
}
} else {
ChardevCommon *ccom = g_new0(ChardevCommon, 1);
@@ -4243,37 +4247,33 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
backend->u.null.data = ccom; /* Any ChardevCommon member would work */
}
- ret = qmp_chardev_add(bid ? bid : id, backend, errp);
- if (!ret) {
- goto qapi_out;
+ chr = qemu_chardev_add(bid ? bid : id,
+ object_class_get_name(OBJECT_CLASS(cc)),
+ backend, errp);
+ if (chr == NULL) {
+ goto out;
}
if (bid) {
+ Chardev *mux;
qapi_free_ChardevBackend(backend);
- qapi_free_ChardevReturn(ret);
backend = g_new0(ChardevBackend, 1);
- backend->u.mux.data = g_new0(ChardevMux, 1);
backend->type = CHARDEV_BACKEND_KIND_MUX;
+ backend->u.mux.data = g_new0(ChardevMux, 1);
backend->u.mux.data->chardev = g_strdup(bid);
- ret = qmp_chardev_add(id, backend, errp);
- if (!ret) {
- chr = qemu_chr_find(bid);
+ mux = qemu_chardev_add(id, TYPE_CHARDEV_MUX, backend, errp);
+ if (mux == NULL) {
qemu_chr_delete(chr);
chr = NULL;
- goto qapi_out;
+ goto out;
}
+ chr = mux;
}
- chr = qemu_chr_find(id);
-
-qapi_out:
+out:
qapi_free_ChardevBackend(backend);
- qapi_free_ChardevReturn(ret);
g_free(bid);
return chr;
-
-err:
- return NULL;
}
Chardev *qemu_chr_new_noreplay(const char *label, const char *filename)
@@ -4678,7 +4678,6 @@ static void char_parallel_class_init(ObjectClass *oc,
void *data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_PARALLEL;
cc->parse = qemu_chr_parse_parallel;
cc->open = qmp_chardev_open_parallel;
#if defined(__linux__)
@@ -4721,7 +4720,6 @@ static void char_file_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_FILE;
cc->parse = qemu_chr_parse_file_out;
cc->open = qmp_chardev_open_file;
}
@@ -4742,7 +4740,6 @@ static void char_serial_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_SERIAL;
cc->parse = qemu_chr_parse_serial;
cc->open = qmp_chardev_open_serial;
#ifndef _WIN32
@@ -4903,7 +4900,6 @@ static void char_socket_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_SOCKET;
cc->parse = qemu_chr_parse_socket;
cc->open = qmp_chardev_open_socket;
cc->chr_wait_connected = tcp_chr_wait_connected;
@@ -4957,7 +4953,6 @@ static void char_udp_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_UDP;
cc->parse = qemu_chr_parse_udp;
cc->open = qmp_chardev_open_udp;
cc->chr_write = udp_chr_write;
@@ -5016,24 +5011,18 @@ Chardev *qemu_chardev_new(const char *id, const char
*typename,
ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
Error **errp)
{
- const ChardevClass *cc;
ChardevReturn *ret;
+ const ChardevClass *cc;
Chardev *chr;
- chr = qemu_chr_find(id);
- if (chr) {
- error_setg(errp, "Chardev '%s' already exists", id);
- return NULL;
- }
-
cc = char_get_class(ChardevBackendKind_lookup[backend->type], errp);
- if (!cc) {
+ if (cc == NULL) {
return NULL;
}
- chr = qemu_chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)),
+ chr = qemu_chardev_add(id, object_class_get_name(OBJECT_CLASS(cc)),
backend, errp);
- if (!chr) {
+ if (chr == NULL) {
return NULL;
}
@@ -5043,7 +5032,6 @@ ChardevReturn *qmp_chardev_add(const char *id,
ChardevBackend *backend,
ret->has_pty = true;
}
- QTAILQ_INSERT_TAIL(&chardevs, chr, next);
return ret;
}
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
index 298a951681..dbc81ba4f6 100644
--- a/spice-qemu-char.c
+++ b/spice-qemu-char.c
@@ -379,7 +379,6 @@ static void char_spicevmc_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_SPICEVMC;
cc->parse = qemu_chr_parse_spice_vmc;
cc->open = qemu_chr_open_spice_vmc;
cc->chr_set_fe_open = spice_vmc_set_fe_open;
@@ -395,7 +394,6 @@ static void char_spiceport_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_SPICEPORT;
cc->parse = qemu_chr_parse_spice_port;
cc->open = qemu_chr_open_spice_port;
cc->chr_set_fe_open = spice_port_set_fe_open;
diff --git a/ui/console.c b/ui/console.c
index 712fa1aec1..1b66868a08 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -2176,7 +2176,6 @@ static void char_vc_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_VC;
cc->parse = qemu_chr_parse_vc;
cc->open = vc_open;
cc->chr_write = vc_chr_write;
diff --git a/ui/gtk.c b/ui/gtk.c
index aa3412d09c..8aa8edbf40 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1727,7 +1727,6 @@ static void char_gd_vc_class_init(ObjectClass *oc, void
*data)
{
ChardevClass *cc = CHARDEV_CLASS(oc);
- cc->kind = CHARDEV_BACKEND_KIND_VC;
cc->parse = qemu_chr_parse_vc;
cc->open = gd_vc_open;
cc->chr_write = gd_vc_chr_write;
diff --git a/include/sysemu/char.h b/include/sysemu/char.h
index 203e8e84e3..297add973c 100644
--- a/include/sysemu/char.h
+++ b/include/sysemu/char.h
@@ -472,7 +472,6 @@ typedef struct ChardevClass {
ObjectClass parent_class;
bool internal; /* TODO: eventually use TYPE_USER_CREATABLE */
- ChardevBackendKind kind;
void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);
void (*open)(Chardev *chr, ChardevBackend *backend,
--
2.11.0
- [Qemu-devel] [PATCH 23/54] char-ringbuf: convert to finalize, (continued)
- [Qemu-devel] [PATCH 23/54] char-ringbuf: convert to finalize, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 24/54] char-parallel: convert parallel to finalize, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 25/54] char-stdio: convert to finalize, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 26/54] char-win-stdio: convert to finalize, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 27/54] char-win: do not override chr_free, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 28/54] char-win: convert to finalize, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 29/54] char-fd: convert to finalize, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 30/54] char: remove chr_free, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 31/54] char: get rid of CharDriver, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 33/54] char: move to chardev/, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 32/54] char: remove class kind field,
Marc-André Lureau <=
- [Qemu-devel] [PATCH 34/54] char: create chardev-obj-y, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 35/54] char: make null_chr_write() the default method, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 36/54] char: move null chardev to its own file, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 37/54] char: move mux to its own file, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 38/54] char: move ringbuf/memory to its own file, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 40/54] char: remove unused READ_RETRIES, Marc-André Lureau, 2016/12/12
- [Qemu-devel] [PATCH 39/54] char: rename and move to header CHR_READ_BUF_LEN, Marc-André Lureau, 2016/12/12