[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 47/50] char: replace avail_connections
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 47/50] char: replace avail_connections |
Date: |
Mon, 24 Oct 2016 15:47:32 +0200 |
From: Marc-André Lureau <address@hidden>
No need to count the users of a CharDriverState, it can rely on the fact
of whether there is a CharBackend associated or if there is enough space
in the muxer.
Simplify and fold chr_mux_new_fe() in qemu_chr_fe_init() since there is
a single user now. Also switch from fprintf to raising error instead.
Signed-off-by: Marc-André Lureau <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/bt/hci-csr.c | 1 -
include/sysemu/char.h | 1 -
qemu-char.c | 34 +++++++++++++---------------------
3 files changed, 13 insertions(+), 23 deletions(-)
diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c
index cdf52a9..fbb3109 100644
--- a/hw/bt/hci-csr.c
+++ b/hw/bt/hci-csr.c
@@ -468,7 +468,6 @@ CharDriverState *uart_hci_init(void)
s->chr.opaque = s;
s->chr.chr_write = csrhci_write;
s->chr.chr_ioctl = csrhci_ioctl;
- s->chr.avail_connections = 1;
s->hci = qemu_next_hci();
s->hci->opaque = s;
diff --git a/include/sysemu/char.h b/include/sysemu/char.h
index 6bad856..0628b14 100644
--- a/include/sysemu/char.h
+++ b/include/sysemu/char.h
@@ -110,7 +110,6 @@ struct CharDriverState {
int logfd;
int be_open;
int explicit_be_open;
- int avail_connections;
int is_mux;
guint fd_in_tag;
bool replay;
diff --git a/qemu-char.c b/qemu-char.c
index 9bd2e65..02adea4 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -808,20 +808,6 @@ static void mux_chr_free(struct CharDriverState *chr)
g_free(d);
}
-static int mux_chr_new_fe(CharDriverState *chr, CharBackend *be, Error **errp)
-{
- MuxDriver *d = chr->opaque;
-
- if (d->mux_cnt >= MAX_MUX) {
- fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
- return -1;
- }
-
- d->backends[d->mux_cnt] = be;
-
- return d->mux_cnt++;
-}
-
static void mux_chr_set_handlers(CharDriverState *chr, GMainContext *context)
{
MuxDriver *d = chr->opaque;
@@ -902,10 +888,16 @@ bool qemu_chr_fe_init(CharBackend *b, CharDriverState *s,
Error **errp)
int tag = 0;
if (s->is_mux) {
- tag = mux_chr_new_fe(s, b, errp);
- if (tag < 0) {
- return false;
+ MuxDriver *d = s->opaque;
+
+ if (d->mux_cnt >= MAX_MUX) {
+ goto unavailable;
}
+
+ d->backends[d->mux_cnt] = b;
+ tag = d->mux_cnt++;
+ } else if (s->be) {
+ goto unavailable;
} else {
s->be = b;
}
@@ -913,8 +905,11 @@ bool qemu_chr_fe_init(CharBackend *b, CharDriverState *s,
Error **errp)
b->fe_open = false;
b->tag = tag;
b->chr = s;
-
return true;
+
+unavailable:
+ error_setg(errp, QERR_DEVICE_IN_USE, s->label);
+ return false;
}
static bool qemu_chr_is_busy(CharDriverState *s)
@@ -933,7 +928,6 @@ void qemu_chr_fe_deinit(CharBackend *b)
if (b->chr) {
qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true);
- b->chr->avail_connections++;
b->chr->be = NULL;
if (b->chr->is_mux) {
MuxDriver *d = b->chr->opaque;
@@ -4782,8 +4776,6 @@ ChardevReturn *qmp_chardev_add(const char *id,
ChardevBackend *backend,
}
chr->label = g_strdup(id);
- chr->avail_connections =
- (backend->type == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
if (!chr->filename) {
chr->filename = g_strdup(ChardevBackendKind_lookup[backend->type]);
}
--
1.8.3.1
- [Qemu-devel] [PULL 41/50] char: rename chr_close/chr_free, (continued)
- [Qemu-devel] [PULL 41/50] char: rename chr_close/chr_free, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 43/50] char: move fe_open in CharBackend, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 39/50] tests: start chardev unit tests, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 45/50] char: use an enum for CHR_EVENT, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 38/50] char: make some qemu_chr_fe skip if no driver, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 40/50] char: move front end handlers in CharBackend, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 46/50] char: remove unused qemu_chr_fe_event, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 42/50] char: remove explicit_fe_open, use a set_handlers argument, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 34/50] char: use qemu_chr_fe* functions with CharBackend argument, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 44/50] char: remove unused CHR_EVENT_FOCUS, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 47/50] char: replace avail_connections,
Paolo Bonzini <=
- [Qemu-devel] [PULL 48/50] char: use common error path in qmp_chardev_add, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 49/50] char: remove explicit_be_open from CharDriverState, Paolo Bonzini, 2016/10/24
- [Qemu-devel] [PULL 50/50] exec.c: workaround regression caused by alignment change in d2f39ad, Paolo Bonzini, 2016/10/24
- Re: [Qemu-devel] [PULL 00/50] Miscellaneous patches for 2016-10-24, Peter Maydell, 2016/10/24