Hello,
This refreshed series adds support for non-blocking chardev writes if
the caller asks for it.
This series does away with the special qemu_chr_write_nb() call that
did nonblocking writes. Instead, now the writes are nonblocking if
the caller registers a callback function with the chardev that
indicates a driver became writable.
Individual drivers too have to be modified a bit to update their fd
handlers for nonblocking writes to work.
This series has non-blocking support for the unix and tcp drivers.
The virtio-console code is tweaked to use this facility.
This helps a fast guest slow down in case of a slow host reader. The
worst-case condition was a guest writing data to a chardev that wasn't
being read from resulting in the guest getting unresponsive.
Amit Shah (7):
virtio-console: Factor out common init between console and generic
ports
char: Add a QemuChrHandlers struct to initialise chardev handlers
char: Introduce char_set/remove_fd_handlers()
char: Add framework for a 'write unblocked' callback
char: Update send_all() to handle nonblocking chardev write requests
char: Equip the unix/tcp backend to handle nonblocking writes
virtio-console: Enable port throttling when chardev is slow to
consume data
gdbstub.c | 9 ++-
hw/debugcon.c | 2 +-
hw/escc.c | 9 ++-
hw/etraxfs_ser.c | 13 +++-
hw/ivshmem.c | 28 ++++++--
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 | 53 +++++++++-----
hw/xen_console.c | 16 +++--
hw/xilinx_uartlite.c | 11 +++-
monitor.c | 19 ++++-
net/slirp.c | 8 ++-
net/socket.c | 4 +-
qemu-char.c | 190 ++++++++++++++++++++++++++++++++++++++++----------
qemu-char.h | 17 ++++-
qemu_socket.h | 2 +-
21 files changed, 343 insertions(+), 108 deletions(-)
--
1.7.3.2