From: Anthony Liguori <anthony@codemonkey.ws>
To: Amit Shah <amit.shah@redhat.com>
Cc: Paul Brook <paul@codesourcery.com>,
Juan Quintela <quintela@redhat.com>,
qemu list <qemu-devel@nongnu.org>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] Re: [PATCH v7 2/6] char: Add a QemuChrHandlers struct to initialise chardev handlers
Date: Wed, 05 May 2010 08:13:58 -0500 [thread overview]
Message-ID: <4BE16F16.5030601@codemonkey.ws> (raw)
In-Reply-To: <1273009170-17530-3-git-send-email-amit.shah@redhat.com>
On 05/04/2010 04:39 PM, Amit Shah wrote:
> Instead of passing each handler in the qemu_add_handlers() function,
> create a struct of handlers that can be passed to the function instead.
>
> Signed-off-by: Amit Shah<amit.shah@redhat.com>
> ---
> gdbstub.c | 9 +++++++--
> hw/debugcon.c | 2 +-
> hw/escc.c | 9 +++++++--
> hw/etraxfs_ser.c | 13 +++++++++----
> hw/mcf_uart.c | 9 +++++++--
> hw/pl011.c | 9 +++++++--
> hw/pxa2xx.c | 13 +++++++++----
> hw/serial.c | 9 +++++++--
> hw/sh_serial.c | 12 +++++++++---
> hw/syborg_serial.c | 9 +++++++--
> hw/usb-serial.c | 9 +++++++--
> hw/virtio-console.c | 9 +++++++--
> hw/xen_console.c | 16 +++++++++++-----
> hw/xilinx_uartlite.c | 11 +++++++++--
> monitor.c | 19 +++++++++++++++----
> net/slirp.c | 8 ++++++--
> qemu-char.c | 27 ++++++++++++++++++---------
> qemu-char.h | 12 ++++++++----
> 18 files changed, 151 insertions(+), 54 deletions(-)
>
> diff --git a/gdbstub.c b/gdbstub.c
> index 93c4850..ae29db1 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -2621,6 +2621,12 @@ static void gdb_sigterm_handler(int signal)
> }
> #endif
>
> +static const QemuChrHandlers gdb_handlers = {
> + .fd_can_read = gdb_chr_can_receive,
> + .fd_read = gdb_chr_receive,
> + .fd_event = gdb_chr_event,
> +};
> +
> int gdbserver_start(const char *device)
> {
> GDBState *s;
> @@ -2650,8 +2656,7 @@ int gdbserver_start(const char *device)
> if (!chr)
> return -1;
>
> - qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive,
> - gdb_chr_event, NULL);
> + qemu_chr_add_handlers(chr,&gdb_handlers, NULL);
> }
>
This sort of change isn't a bad one but if we're making this change, we
should change the signature of these functions to also take a
QemuChrHandlers *.
Also, let's drop the qemu_ and Qemu prefixes while we're at it.
Regards,
Anthony Liguori
> s = gdbserver_state;
> diff --git a/hw/debugcon.c b/hw/debugcon.c
> index 5ee6821..e79a595 100644
> --- a/hw/debugcon.c
> +++ b/hw/debugcon.c
> @@ -73,7 +73,7 @@ static void debugcon_init_core(DebugconState *s)
> exit(1);
> }
>
> - qemu_chr_add_handlers(s->chr, NULL, NULL, NULL, s);
> + qemu_chr_add_handlers(s->chr, NULL, s);
> }
>
> static int debugcon_isa_initfn(ISADevice *dev)
> diff --git a/hw/escc.c b/hw/escc.c
> index 6d2fd36..4057bb4 100644
> --- a/hw/escc.c
> +++ b/hw/escc.c
> @@ -890,6 +890,12 @@ void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq,
> sysbus_mmio_map(s, 0, base);
> }
>
> +static const QemuChrHandlers serial_handlers = {
> + .fd_can_read = serial_can_receive,
> + .fd_read = serial_receive1,
> + .fd_event = serial_event,
> +};
> +
> static int escc_init1(SysBusDevice *dev)
> {
> SerialState *s = FROM_SYSBUS(SerialState, dev);
> @@ -903,8 +909,7 @@ static int escc_init1(SysBusDevice *dev)
> s->chn[i].chn = 1 - i;
> s->chn[i].clock = s->frequency / 2;
> if (s->chn[i].chr) {
> - qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
> - serial_receive1, serial_event,&s->chn[i]);
> + qemu_chr_add_handlers(s->chn[i].chr,&serial_handlers,&s->chn[i]);
> }
> }
> s->chn[0].otherchn =&s->chn[1];
> diff --git a/hw/etraxfs_ser.c b/hw/etraxfs_ser.c
> index e1f9615..0c0c485 100644
> --- a/hw/etraxfs_ser.c
> +++ b/hw/etraxfs_ser.c
> @@ -161,6 +161,12 @@ static void serial_event(void *opaque, int event)
>
> }
>
> +static const QemuChrHandlers serial_handlers = {
> + .fd_can_read = serial_can_receive,
> + .fd_read = serial_receive,
> + .fd_event = serial_event,
> +};
> +
> static int etraxfs_ser_init(SysBusDevice *dev)
> {
> struct etrax_serial *s = FROM_SYSBUS(typeof (*s), dev);
> @@ -174,10 +180,9 @@ static int etraxfs_ser_init(SysBusDevice *dev)
> ser_regs = cpu_register_io_memory(ser_read, ser_write, s);
> sysbus_init_mmio(dev, R_MAX * 4, ser_regs);
> s->chr = qdev_init_chardev(&dev->qdev);
> - if (s->chr)
> - qemu_chr_add_handlers(s->chr,
> - serial_can_receive, serial_receive,
> - serial_event, s);
> + if (s->chr) {
> + qemu_chr_add_handlers(s->chr,&serial_handlers, s);
> + }
> return 0;
> }
>
> diff --git a/hw/mcf_uart.c b/hw/mcf_uart.c
> index d16bac7..d2ce5f6 100644
> --- a/hw/mcf_uart.c
> +++ b/hw/mcf_uart.c
> @@ -268,6 +268,12 @@ static void mcf_uart_receive(void *opaque, const uint8_t *buf, int size)
> mcf_uart_push_byte(s, buf[0]);
> }
>
> +static const QemuChrHandlers mcf_uart_handlers = {
> + .fd_can_read = mcf_uart_can_receive,
> + .fd_read = mcf_uart_receive,
> + .fd_event = mcf_uart_event,
> +};
> +
> void *mcf_uart_init(qemu_irq irq, CharDriverState *chr)
> {
> mcf_uart_state *s;
> @@ -276,8 +282,7 @@ void *mcf_uart_init(qemu_irq irq, CharDriverState *chr)
> s->chr = chr;
> s->irq = irq;
> if (chr) {
> - qemu_chr_add_handlers(chr, mcf_uart_can_receive, mcf_uart_receive,
> - mcf_uart_event, s);
> + qemu_chr_add_handlers(chr,&mcf_uart_handlers, s);
> }
> mcf_uart_reset(s);
> return s;
> diff --git a/hw/pl011.c b/hw/pl011.c
> index 81de91e..24711c2 100644
> --- a/hw/pl011.c
> +++ b/hw/pl011.c
> @@ -286,6 +286,12 @@ static int pl011_load(QEMUFile *f, void *opaque, int version_id)
> return 0;
> }
>
> +static const QemuChrHandlers pl011_handlers = {
> + .fd_can_read = pl011_can_receive,
> + .fd_read = pl011_receive,
> + .fd_event = pl011_event,
> +};
> +
> static int pl011_init(SysBusDevice *dev, const unsigned char *id)
> {
> int iomemtype;
> @@ -303,8 +309,7 @@ static int pl011_init(SysBusDevice *dev, const unsigned char *id)
> s->cr = 0x300;
> s->flags = 0x90;
> if (s->chr) {
> - qemu_chr_add_handlers(s->chr, pl011_can_receive, pl011_receive,
> - pl011_event, s);
> + qemu_chr_add_handlers(s->chr,&pl011_handlers, s);
> }
> register_savevm("pl011_uart", -1, 1, pl011_save, pl011_load, s);
> return 0;
> diff --git a/hw/pxa2xx.c b/hw/pxa2xx.c
> index 9095386..e2adaaf 100644
> --- a/hw/pxa2xx.c
> +++ b/hw/pxa2xx.c
> @@ -1992,6 +1992,12 @@ static int pxa2xx_fir_load(QEMUFile *f, void *opaque, int version_id)
> return 0;
> }
>
> +static const QemuChrHandlers pxa2xx_handlers = {
> + .fd_can_read = pxa2xx_fir_is_empty,
> + .fd_read = pxa2xx_fir_rx,
> + .fd_event = pxa2xx_fir_event,
> +};
> +
> static PXA2xxFIrState *pxa2xx_fir_init(target_phys_addr_t base,
> qemu_irq irq, PXA2xxDMAState *dma,
> CharDriverState *chr)
> @@ -2010,10 +2016,9 @@ static PXA2xxFIrState *pxa2xx_fir_init(target_phys_addr_t base,
> pxa2xx_fir_writefn, s);
> cpu_register_physical_memory(base, 0x1000, iomemtype);
>
> - if (chr)
> - qemu_chr_add_handlers(chr, pxa2xx_fir_is_empty,
> - pxa2xx_fir_rx, pxa2xx_fir_event, s);
> -
> + if (chr) {
> + qemu_chr_add_handlers(chr,&pxa2xx_handlers, s);
> + }
> register_savevm("pxa2xx_fir", 0, 0, pxa2xx_fir_save, pxa2xx_fir_load, s);
>
> return s;
> diff --git a/hw/serial.c b/hw/serial.c
> index 90213c4..d4cc317 100644
> --- a/hw/serial.c
> +++ b/hw/serial.c
> @@ -724,6 +724,12 @@ static void serial_reset(void *opaque)
> qemu_irq_lower(s->irq);
> }
>
> +static const QemuChrHandlers serial_handlers = {
> + .fd_can_read = serial_can_receive1,
> + .fd_read = serial_receive1,
> + .fd_event = serial_event,
> +};
> +
> static void serial_init_core(SerialState *s)
> {
> if (!s->chr) {
> @@ -738,8 +744,7 @@ static void serial_init_core(SerialState *s)
>
> qemu_register_reset(serial_reset, s);
>
> - qemu_chr_add_handlers(s->chr, serial_can_receive1, serial_receive1,
> - serial_event, s);
> + qemu_chr_add_handlers(s->chr,&serial_handlers, s);
> }
>
> /* Change the main reference oscillator frequency. */
> diff --git a/hw/sh_serial.c b/hw/sh_serial.c
> index 93dc144..2201dba 100644
> --- a/hw/sh_serial.c
> +++ b/hw/sh_serial.c
> @@ -363,6 +363,12 @@ static CPUWriteMemoryFunc * const sh_serial_writefn[] = {
> &sh_serial_write,
> };
>
> +static const QemuChrHandlers sh_serial_handlers = {
> + .fd_can_read = sh_serial_can_receive1,
> + .fd_read = sh_serial_receive1,
> + .fd_event = sh_serial_event,
> +};
> +
> void sh_serial_init (target_phys_addr_t base, int feat,
> uint32_t freq, CharDriverState *chr,
> qemu_irq eri_source,
> @@ -401,9 +407,9 @@ void sh_serial_init (target_phys_addr_t base, int feat,
>
> s->chr = chr;
>
> - if (chr)
> - qemu_chr_add_handlers(chr, sh_serial_can_receive1, sh_serial_receive1,
> - sh_serial_event, s);
> + if (chr) {
> + qemu_chr_add_handlers(chr,&sh_serial_handlers, s);
> + }
>
> s->eri = eri_source;
> s->rxi = rxi_source;
> diff --git a/hw/syborg_serial.c b/hw/syborg_serial.c
> index cac00ea..9ad5ddc 100644
> --- a/hw/syborg_serial.c
> +++ b/hw/syborg_serial.c
> @@ -315,6 +315,12 @@ static int syborg_serial_load(QEMUFile *f, void *opaque, int version_id)
> return 0;
> }
>
> +static const QemuChrHandlers syborg_serial_handlers = {
> + .fd_can_read = syborg_serial_can_receive,
> + .fd_read = syborg_serial_receive,
> + .fd_event = syborg_serial_event,
> +};
> +
> static int syborg_serial_init(SysBusDevice *dev)
> {
> SyborgSerialState *s = FROM_SYSBUS(SyborgSerialState, dev);
> @@ -326,8 +332,7 @@ static int syborg_serial_init(SysBusDevice *dev)
> sysbus_init_mmio(dev, 0x1000, iomemtype);
> s->chr = qdev_init_chardev(&dev->qdev);
> if (s->chr) {
> - qemu_chr_add_handlers(s->chr, syborg_serial_can_receive,
> - syborg_serial_receive, syborg_serial_event, s);
> + qemu_chr_add_handlers(s->chr,&syborg_serial_handlers, s);
> }
> if (s->fifo_size<= 0) {
> fprintf(stderr, "syborg_serial: fifo too small\n");
> diff --git a/hw/usb-serial.c b/hw/usb-serial.c
> index 5b2483a..56e2b00 100644
> --- a/hw/usb-serial.c
> +++ b/hw/usb-serial.c
> @@ -540,13 +540,18 @@ static void usb_serial_event(void *opaque, int event)
> }
> }
>
> +static const QemuChrHandlers usb_serial_handlers = {
> + .fd_can_read = usb_serial_can_read,
> + .fd_read = usb_serial_read,
> + .fd_event = usb_serial_event,
> +};
> +
> static int usb_serial_initfn(USBDevice *dev)
> {
> USBSerialState *s = DO_UPCAST(USBSerialState, dev, dev);
> s->dev.speed = USB_SPEED_FULL;
>
> - qemu_chr_add_handlers(s->cs, usb_serial_can_read, usb_serial_read,
> - usb_serial_event, s);
> + qemu_chr_add_handlers(s->cs,&usb_serial_handlers, s);
> usb_serial_handle_reset(dev);
> return 0;
> }
> diff --git a/hw/virtio-console.c b/hw/virtio-console.c
> index d7fe68b..862a431 100644
> --- a/hw/virtio-console.c
> +++ b/hw/virtio-console.c
> @@ -58,13 +58,18 @@ static void chr_event(void *opaque, int event)
> }
> }
>
> +static const QemuChrHandlers chr_handlers = {
> + .fd_can_read = chr_can_read,
> + .fd_read = chr_read,
> + .fd_event = chr_event,
> +};
> +
> static int generic_port_init(VirtConsole *vcon, VirtIOSerialDevice *dev)
> {
> vcon->port.info = dev->info;
>
> if (vcon->chr) {
> - qemu_chr_add_handlers(vcon->chr, chr_can_read, chr_read, chr_event,
> - vcon);
> + qemu_chr_add_handlers(vcon->chr,&chr_handlers, vcon);
> vcon->port.info->have_data = flush_buf;
> }
> return 0;
> diff --git a/hw/xen_console.c b/hw/xen_console.c
> index d2261f4..8327e4e 100644
> --- a/hw/xen_console.c
> +++ b/hw/xen_console.c
> @@ -202,6 +202,11 @@ static int con_init(struct XenDevice *xendev)
> return 0;
> }
>
> +static const QemuChrHandlers xencons_handlers = {
> + .fd_can_read = xencons_can_receive,
> + .fd_read = xencons_receive,
> +};
> +
> static int con_connect(struct XenDevice *xendev)
> {
> struct XenConsole *con = container_of(xendev, struct XenConsole, xendev);
> @@ -222,9 +227,9 @@ static int con_connect(struct XenDevice *xendev)
> return -1;
>
> xen_be_bind_evtchn(&con->xendev);
> - if (con->chr)
> - qemu_chr_add_handlers(con->chr, xencons_can_receive, xencons_receive,
> - NULL, con);
> + if (con->chr) {
> + qemu_chr_add_handlers(con->chr,&xencons_handlers, con);
> + }
>
> xen_be_printf(xendev, 1, "ring mfn %d, remote port %d, local port %d, limit %zd\n",
> con->ring_ref,
> @@ -238,8 +243,9 @@ static void con_disconnect(struct XenDevice *xendev)
> {
> struct XenConsole *con = container_of(xendev, struct XenConsole, xendev);
>
> - if (con->chr)
> - qemu_chr_add_handlers(con->chr, NULL, NULL, NULL, NULL);
> + if (con->chr) {
> + qemu_chr_add_handlers(con->chr, NULL, NULL);
> + }
> xen_be_unbind_evtchn(&con->xendev);
>
> if (con->sring) {
> diff --git a/hw/xilinx_uartlite.c b/hw/xilinx_uartlite.c
> index adab759..66f0396 100644
> --- a/hw/xilinx_uartlite.c
> +++ b/hw/xilinx_uartlite.c
> @@ -193,6 +193,12 @@ static void uart_event(void *opaque, int event)
>
> }
>
> +static const QemuChrHandlers uart_handlers = {
> + .fd_can_read = uart_can_rx,
> + .fd_read = uart_rx,
> + .fd_event = uart_event,
> +};
> +
> static int xilinx_uartlite_init(SysBusDevice *dev)
> {
> struct xlx_uartlite *s = FROM_SYSBUS(typeof (*s), dev);
> @@ -205,8 +211,9 @@ static int xilinx_uartlite_init(SysBusDevice *dev)
> sysbus_init_mmio(dev, R_MAX * 4, uart_regs);
>
> s->chr = qdev_init_chardev(&dev->qdev);
> - if (s->chr)
> - qemu_chr_add_handlers(s->chr, uart_can_rx, uart_rx, uart_event, s);
> + if (s->chr) {
> + qemu_chr_add_handlers(s->chr,&uart_handlers, s);
> + }
> return 0;
> }
>
> diff --git a/monitor.c b/monitor.c
> index 46d0b47..22a61d4 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -4600,6 +4600,18 @@ static void monitor_event(void *opaque, int event)
> * End:
> */
>
> +static const QemuChrHandlers monitor_handlers = {
> + .fd_can_read = monitor_can_read,
> + .fd_read = monitor_read,
> + .fd_event = monitor_event,
> +};
> +
> +static const QemuChrHandlers monitor_control_handlers = {
> + .fd_can_read = monitor_can_read,
> + .fd_read = monitor_control_read,
> + .fd_event = monitor_control_event,
> +};
> +
> void monitor_init(CharDriverState *chr, int flags)
> {
> static int is_first_init = 1;
> @@ -4621,12 +4633,11 @@ void monitor_init(CharDriverState *chr, int flags)
>
> if (monitor_ctrl_mode(mon)) {
> mon->mc = qemu_mallocz(sizeof(MonitorControl));
> +
> /* Control mode requires special handlers */
> - qemu_chr_add_handlers(chr, monitor_can_read, monitor_control_read,
> - monitor_control_event, mon);
> + qemu_chr_add_handlers(chr,&monitor_control_handlers, mon);
> } else {
> - qemu_chr_add_handlers(chr, monitor_can_read, monitor_read,
> - monitor_event, mon);
> + qemu_chr_add_handlers(chr,&monitor_handlers, mon);
> }
>
> QLIST_INSERT_HEAD(&mon_list, mon, entry);
> diff --git a/net/slirp.c b/net/slirp.c
> index b41c60a..437be46 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -577,6 +577,11 @@ static void guestfwd_read(void *opaque, const uint8_t *buf, int size)
> slirp_socket_recv(fwd->slirp, fwd->server, fwd->port, buf, size);
> }
>
> +static const QemuChrHandlers guestfwd_handlers = {
> + .fd_can_read = guestfwd_can_read,
> + .fd_read = guestfwd_read,
> +};
> +
> static int slirp_guestfwd(SlirpState *s, const char *config_str,
> int legacy_format)
> {
> @@ -633,8 +638,7 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str,
> fwd->port = port;
> fwd->slirp = s->slirp;
>
> - qemu_chr_add_handlers(fwd->hd, guestfwd_can_read, guestfwd_read,
> - NULL, fwd);
> + qemu_chr_add_handlers(fwd->hd,&guestfwd_handlers, fwd);
> return 0;
>
> fail_syntax:
> diff --git a/qemu-char.c b/qemu-char.c
> index ac65a1c..76ad12c 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -191,15 +191,19 @@ void qemu_chr_send_event(CharDriverState *s, int event)
> s->chr_send_event(s, event);
> }
>
> +static const QemuChrHandlers null_handlers = {
> + /* All handlers are initialised to NULL */
> +};
> +
> void qemu_chr_add_handlers(CharDriverState *s,
> - IOCanReadHandler *fd_can_read,
> - IOReadHandler *fd_read,
> - IOEventHandler *fd_event,
> - void *opaque)
> -{
> - s->chr_can_read = fd_can_read;
> - s->chr_read = fd_read;
> - s->chr_event = fd_event;
> + const QemuChrHandlers *handlers, void *opaque)
> +{
> + if (!handlers) {
> + handlers =&null_handlers;
> + }
> + s->chr_can_read = handlers->fd_can_read;
> + s->chr_read = handlers->fd_read;
> + s->chr_event = handlers->fd_event;
> s->handler_opaque = opaque;
> if (s->chr_update_read_handler)
> s->chr_update_read_handler(s);
> @@ -442,6 +446,12 @@ static void mux_chr_event(void *opaque, int event)
> mux_chr_send_event(d, i, event);
> }
>
> +static const QemuChrHandlers mux_chr_handlers = {
> + .fd_can_read = mux_chr_can_read,
> + .fd_read = mux_chr_read,
> + .fd_event = mux_chr_event,
> +};
> +
> static void mux_chr_update_read_handler(CharDriverState *chr)
> {
> MuxDriver *d = chr->opaque;
> @@ -456,8 +466,7 @@ static void mux_chr_update_read_handler(CharDriverState *chr)
> d->chr_event[d->mux_cnt] = chr->chr_event;
> /* Fix up the real driver with mux routines */
> if (d->mux_cnt == 0) {
> - qemu_chr_add_handlers(d->drv, mux_chr_can_read, mux_chr_read,
> - mux_chr_event, chr);
> + qemu_chr_add_handlers(d->drv,&mux_chr_handlers, chr);
> }
> if (d->focus != -1) {
> mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);
> diff --git a/qemu-char.h b/qemu-char.h
> index e3a0783..eacb3b9 100644
> --- a/qemu-char.h
> +++ b/qemu-char.h
> @@ -71,6 +71,13 @@ struct CharDriverState {
> QTAILQ_ENTRY(CharDriverState) next;
> };
>
> +typedef struct QemuChrHandlers {
> + IOCanReadHandler *fd_can_read;
> + IOReadHandler *fd_read;
> + IOHandler *fd_write_unblocked;
> + IOEventHandler *fd_event;
> +} QemuChrHandlers;
> +
> QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename);
> CharDriverState *qemu_chr_open_opts(QemuOpts *opts,
> void (*init)(struct CharDriverState *s));
> @@ -79,10 +86,7 @@ void qemu_chr_close(CharDriverState *chr);
> void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
> int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
> void qemu_chr_send_event(CharDriverState *s, int event);
> -void qemu_chr_add_handlers(CharDriverState *s,
> - IOCanReadHandler *fd_can_read,
> - IOReadHandler *fd_read,
> - IOEventHandler *fd_event,
> +void qemu_chr_add_handlers(CharDriverState *s, const QemuChrHandlers *handlers,
> void *opaque);
> int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
> void qemu_chr_generic_open(CharDriverState *s);
>
next prev parent reply other threads:[~2010-05-05 13:14 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-04 21:39 [Qemu-devel] [PATCH v7 0/6] Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 1/6] virtio-console: Factor out common init between console and generic ports Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 2/6] char: Add a QemuChrHandlers struct to initialise chardev handlers Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 3/6] char: Let writers know how much data was written in case of errors Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 4/6] char: Add qemu_chr_write_nb() for nonblocking writes Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 5/6] char: unix/tcp: Add a non-blocking write handler Amit Shah
2010-05-04 21:39 ` [Qemu-devel] [PATCH v7 6/6] virtio-console: Throttle virtio-serial-bus if we can't consume any more guest data Amit Shah
2010-05-05 13:16 ` [Qemu-devel] Re: [PATCH v7 4/6] char: Add qemu_chr_write_nb() for nonblocking writes Anthony Liguori
2010-05-05 13:22 ` Amit Shah
2010-05-05 13:34 ` Paul Brook
2010-05-05 13:53 ` Anthony Liguori
2010-05-05 14:10 ` Paul Brook
2010-05-05 18:43 ` Gerd Hoffmann
2010-05-05 18:49 ` Anthony Liguori
2010-05-05 19:16 ` Gerd Hoffmann
2010-05-05 19:33 ` Anthony Liguori
2010-05-06 7:11 ` Gerd Hoffmann
2010-05-05 18:40 ` Gerd Hoffmann
2010-05-05 18:48 ` Anthony Liguori
2010-05-05 13:15 ` [Qemu-devel] Re: [PATCH v7 3/6] char: Let writers know how much data was written in case of errors Anthony Liguori
2010-05-05 13:23 ` Amit Shah
2010-05-05 13:54 ` Anthony Liguori
2010-05-05 14:06 ` Amit Shah
2010-05-05 13:13 ` Anthony Liguori [this message]
2010-05-05 13:25 ` [Qemu-devel] Re: [PATCH v7 2/6] char: Add a QemuChrHandlers struct to initialise chardev handlers Amit Shah
2010-05-05 13:59 ` Anthony Liguori
2010-05-04 21:41 ` [Qemu-devel] Re: [PATCH v7 0/6] char: non-blocking writes, virtio-console flow control Amit Shah
2010-05-05 11:18 ` [Qemu-devel] Re: [PATCH v7 0/6] Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BE16F16.5030601@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=amit.shah@redhat.com \
--cc=kraxel@redhat.com \
--cc=paul@codesourcery.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.