S: Maintained
F: target-cris/
F: hw/cris/
+ F: include/hw/cris/
F: tests/tcg/cris/
F: disas/cris.c
S: Maintained
F: target-mips/
F: hw/mips/
+ F: hw/misc/mips_*
+ F: hw/intc/mips_gic.c
+ F: hw/timer/mips_gictimer.c
+ F: include/hw/mips/
+ F: include/hw/misc/mips_*
+ F: include/hw/intc/mips_gic.h
+ F: include/hw/timer/mips_gictimer.h
F: tests/tcg/mips/
F: disas/mips.c
S: Maintained
F: target-moxie/
F: disas/moxie.c
+ F: hw/moxie/
+ F: default-configs/moxie-softmmu.mak
OpenRISC
M: Jia Liu <proljc@gmail.com>
M: Stefan Weil <sw@weilnetz.de>
S: Maintained
F: *win32*
+ F: */*win32*
+ F: include/*/*win32*
+ X: qga/*win32*
F: qemu.nsi
ARM Machines
M: Magnus Damm <magnus.damm@gmail.com>
S: Maintained
F: hw/sh4/r2d.c
+ F: hw/intc/sh_intc.c
+ F: hw/timer/sh_timer.c
Shix
M: Magnus Damm <magnus.damm@gmail.com>
- S: Orphan
+ S: Odd Fixes
F: hw/sh4/shix.c
SPARC Machines
--------------
Sun4m
- M: Blue Swirl <blauwirbel@gmail.com>
M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
S: Maintained
F: hw/sparc/sun4m.c
+ F: hw/dma/sparc32_dma.c
+ F: hw/dma/sun4m_iommu.c
+ F: include/hw/sparc/sparc32_dma.h
+ F: include/hw/sparc/sun4m.h
+ F: pc-bios/openbios-sparc32
Sun4u
- M: Blue Swirl <blauwirbel@gmail.com>
M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
S: Maintained
F: hw/sparc64/sun4u.c
+ F: pc-bios/openbios-sparc64
Leon3
M: Fabien Chouteau <chouteau@adacore.com>
S: Maintained
F: hw/sparc/leon3.c
F: hw/*/grlib*
+ F: include/hw/sparc/grlib.h
S390 Machines
-------------
M: Michael S. Tsirkin <mst@redhat.com>
S: Supported
F: hw/*/virtio*
+ F: hw/virtio/Makefile.objs
+ F: hw/virtio/trace-events
F: net/vhost-user.c
F: include/hw/virtio/
F: tests/virtio-balloon-test.c
M: Jiri Pirko <jiri@resnulli.us>
S: Maintained
F: hw/net/rocker/
+ F: tests/rocker/
+ F: docs/specs/rocker.txt
NVDIMM
M: Xiao Guangrong <guangrong.xiao@linux.intel.com>
S: Maintained
F: audio/
F: hw/audio/
+ F: include/hw/audio/
F: tests/ac97-test.c
F: tests/es1370-test.c
F: tests/intel-hda-test.c
F: vl.c
Human Monitor (HMP)
-M: Luiz Capitulino <lcapitulino@redhat.com>
+M: Dr. David Alan Gilbert <dgilbert@redhat.com>
S: Maintained
F: monitor.c
- F: hmp.c
- F: hmp-commands.hx
+ F: hmp.[ch]
+ F: hmp-commands*.hx
+ F: include/monitor/hmp-target.h
-T: git git://repo.or.cz/qemu/qmp-unstable.git queue/qmp
Network device backends
M: Jason Wang <jasowang@redhat.com>
T: git git://repo.or.cz/qemu/armbru.git qapi-next
QObject
-M: Luiz Capitulino <lcapitulino@redhat.com>
-S: Maintained
+M: Markus Armbruster <armbru@redhat.com>
+S: Supported
F: qobject/
F: include/qapi/qmp/
X: include/qapi/qmp/dispatch.h
F: tests/check-qjson.c
F: tests/check-qlist.c
F: tests/check-qstring.c
-T: git git://repo.or.cz/qemu/qmp-unstable.git queue/qmp
+T: git git://repo.or.cz/qemu/armbru.git qapi-next
QEMU Guest Agent
M: Michael Roth <mdroth@linux.vnet.ibm.com>
BSD user
S: Orphan
F: bsd-user/
+ F: default-configs/*-bsd-user.mak
Linux user
M: Riku Voipio <riku.voipio@iki.fi>
S: Maintained
F: linux-user/
+ F: default-configs/*-linux-user.mak
Tiny Code Generator (TCG)
-------------------------
CharDriverState *chr = g_malloc0(sizeof(CharDriverState));
qemu_mutex_init(&chr->chr_write_lock);
+ chr->mux_idx = -1;
if (backend->has_logfile) {
int flags = O_WRONLY | O_CREAT;
if (backend->has_logappend &&
s->chr_read = fd_read;
s->chr_event = fd_event;
s->handler_opaque = opaque;
- if (fe_open && s->chr_update_read_handler) {
+ if (s->chr_update_read_handler) {
s->chr_update_read_handler(s, context);
}
GMainContext *context)
{
MuxDriver *d = chr->opaque;
+ int idx;
if (d->mux_cnt >= MAX_MUX) {
fprintf(stderr, "Cannot add I/O handlers, MUX array is full\n");
return;
}
- d->ext_opaque[d->mux_cnt] = chr->handler_opaque;
- d->chr_can_read[d->mux_cnt] = chr->chr_can_read;
- d->chr_read[d->mux_cnt] = chr->chr_read;
- d->chr_event[d->mux_cnt] = chr->chr_event;
+
+ if (chr->mux_idx == -1) {
+ chr->mux_idx = d->mux_cnt++;
+ }
+
+ idx = chr->mux_idx;
+ d->ext_opaque[idx] = chr->handler_opaque;
+ d->chr_can_read[idx] = chr->chr_can_read;
+ d->chr_read[idx] = chr->chr_read;
+ d->chr_event[idx] = chr->chr_event;
+
/* Fix up the real driver with mux routines */
- if (d->mux_cnt == 0) {
+ if (d->mux_cnt == 1) {
qemu_chr_add_handlers_full(d->drv, mux_chr_can_read,
mux_chr_read,
mux_chr_event,
if (d->focus != -1) {
mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
}
- d->focus = d->mux_cnt;
- d->mux_cnt++;
+ d->focus = idx;
mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);
}
if (tioc == NULL) {
error_free(err);
tcp_chr_disconnect(chr);
+ return;
}
object_unref(OBJECT(s->ioc));
s->ioc = QIO_CHANNEL(tioc);