[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 29/41] char: introduce generic qemu_chr_get_kind()
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 29/41] char: introduce generic qemu_chr_get_kind() |
Date: |
Fri, 27 Jan 2017 14:45:37 +0100 |
From: Marc-André Lureau <address@hidden>
This allows to remove the "is_mux" field from CharDriverState.
Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
include/sysemu/char.h | 15 +++++++++++++--
monitor.c | 2 +-
qemu-char.c | 21 ++++++++++-----------
3 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/include/sysemu/char.h b/include/sysemu/char.h
index 2dd0564..7d841ad 100644
--- a/include/sysemu/char.h
+++ b/include/sysemu/char.h
@@ -96,7 +96,6 @@ struct CharDriverState {
char *filename;
int logfd;
int be_open;
- int is_mux;
guint fd_in_tag;
bool replay;
DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST);
@@ -455,7 +454,19 @@ void qemu_chr_be_generic_open(CharDriverState *s);
void qemu_chr_fe_accept_input(CharBackend *be);
int qemu_chr_add_client(CharDriverState *s, int fd);
CharDriverState *qemu_chr_find(const char *name);
-bool chr_is_ringbuf(const CharDriverState *chr);
+
+/**
+ * @qemu_chr_get_kind:
+ *
+ * Returns the kind of char backend, or -1 if unspecified.
+ */
+ChardevBackendKind qemu_chr_get_kind(const CharDriverState *chr);
+
+static inline bool qemu_chr_is_ringbuf(const CharDriverState *chr)
+{
+ return qemu_chr_get_kind(chr) == CHARDEV_BACKEND_KIND_RINGBUF ||
+ qemu_chr_get_kind(chr) == CHARDEV_BACKEND_KIND_MEMORY;
+}
bool qemu_chr_has_feature(CharDriverState *chr,
CharDriverFeature feature);
diff --git a/monitor.c b/monitor.c
index 6ac4e95..24add02 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3196,7 +3196,7 @@ static void ringbuf_completion(ReadLineState *rs, const
char *str)
if (!strncmp(chr_info->label, str, len)) {
CharDriverState *chr = qemu_chr_find(chr_info->label);
- if (chr && chr_is_ringbuf(chr)) {
+ if (chr && qemu_chr_is_ringbuf(chr)) {
readline_add_completion(rs, chr_info->label);
}
}
diff --git a/qemu-char.c b/qemu-char.c
index 4719ad6..a7afb59 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -781,7 +781,7 @@ static void muxes_realize_done(Notifier *notifier, void
*unused)
CharDriverState *chr;
QTAILQ_FOREACH(chr, &chardevs, next) {
- if (chr->is_mux) {
+ if (qemu_chr_get_kind(chr) == CHARDEV_BACKEND_KIND_MUX) {
MuxDriver *d = chr->opaque;
int i;
@@ -888,7 +888,6 @@ static CharDriverState *qemu_chr_open_mux(const CharDriver
*driver,
* set of muxes
*/
*be_opened = muxes_realized;
- chr->is_mux = 1;
if (!qemu_chr_fe_init(&d->chr, drv, errp)) {
qemu_chr_free(chr);
return NULL;
@@ -906,7 +905,7 @@ bool qemu_chr_fe_init(CharBackend *b, CharDriverState *s,
Error **errp)
{
int tag = 0;
- if (s->is_mux) {
+ if (qemu_chr_get_kind(s) == CHARDEV_BACKEND_KIND_MUX) {
MuxDriver *d = s->opaque;
if (d->mux_cnt >= MAX_MUX) {
@@ -933,7 +932,7 @@ unavailable:
static bool qemu_chr_is_busy(CharDriverState *s)
{
- if (s->is_mux) {
+ if (qemu_chr_get_kind(s) == CHARDEV_BACKEND_KIND_MUX) {
MuxDriver *d = s->opaque;
return d->mux_cnt >= 0;
} else {
@@ -950,7 +949,7 @@ void qemu_chr_fe_deinit(CharBackend *b)
if (b->chr->be == b) {
b->chr->be = NULL;
}
- if (b->chr->is_mux) {
+ if (qemu_chr_get_kind(b->chr) == CHARDEV_BACKEND_KIND_MUX) {
MuxDriver *d = b->chr->opaque;
d->backends[b->tag] = NULL;
}
@@ -1001,7 +1000,7 @@ void qemu_chr_fe_set_handlers(CharBackend *b,
}
}
- if (s->is_mux) {
+ if (qemu_chr_get_kind(s) == CHARDEV_BACKEND_KIND_MUX) {
mux_chr_set_handlers(s, context);
}
}
@@ -1012,7 +1011,7 @@ void qemu_chr_fe_take_focus(CharBackend *b)
return;
}
- if (b->chr->is_mux) {
+ if (qemu_chr_get_kind(b->chr) == CHARDEV_BACKEND_KIND_MUX) {
mux_set_focus(b->chr, b->tag);
}
}
@@ -3559,9 +3558,9 @@ fail:
return NULL;
}
-bool chr_is_ringbuf(const CharDriverState *chr)
+ChardevBackendKind qemu_chr_get_kind(const CharDriverState *chr)
{
- return chr->driver->chr_write == ringbuf_chr_write;
+ return chr->driver->kind;
}
void qmp_ringbuf_write(const char *device, const char *data,
@@ -3579,7 +3578,7 @@ void qmp_ringbuf_write(const char *device, const char
*data,
return;
}
- if (!chr_is_ringbuf(chr)) {
+ if (!qemu_chr_is_ringbuf(chr)) {
error_setg(errp,"%s is not a ringbuf device", device);
return;
}
@@ -3623,7 +3622,7 @@ char *qmp_ringbuf_read(const char *device, int64_t size,
return NULL;
}
- if (!chr_is_ringbuf(chr)) {
+ if (!qemu_chr_is_ringbuf(chr)) {
error_setg(errp,"%s is not a ringbuf device", device);
return NULL;
}
--
1.8.3.1
- [Qemu-devel] [PULL 19/41] pc: Enable vmware-cpuid-freq CPU option for 2.9+ machine types, (continued)
- [Qemu-devel] [PULL 19/41] pc: Enable vmware-cpuid-freq CPU option for 2.9+ machine types, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 23/41] char: add qemu_chr_fe_add_watch() Returns description, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 20/41] block/iscsi: statically link qemu_iscsi_opts, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 24/41] doc: fix spelling, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 21/41] tests: fix linking test-char on win32, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 26/41] char: use a static array for backends, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 25/41] char: use a const CharDriver, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 22/41] qemu-options: stdio is available on win32, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 28/41] char: fold single-user functions in caller, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 30/41] char: use a feature bit for replay, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 29/41] char: introduce generic qemu_chr_get_kind(),
Paolo Bonzini <=
- [Qemu-devel] [PULL 32/41] bt: use qemu_chr_alloc(), Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 27/41] char: move callbacks in CharDriver, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 35/41] spice-char: improve error reporting, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 37/41] gtk: overwrite the console.c char driver, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 34/41] char: rename TCPChardev and NetChardev, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 38/41] baum: use a common prefix for chr callbacks, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 36/41] char: use error_report(), Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 31/41] char: allocate CharDriverState as a single object, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 39/41] vc: use a common prefix for chr callbacks, Paolo Bonzini, 2017/01/27
- [Qemu-devel] [PULL 41/41] memory: don't sign-extend 32-bit writes, Paolo Bonzini, 2017/01/27