Even though virtio-blk-dataplane mostly synchronizes with the block layer by means of the AioContext, we still need to introduce mutexes for other QEMU subsystems that the dataplane thread might encounter on its way. Adding rerror/werror support, for example, means that the dataplane thread will have to generate QMP events.
monitor_puts is the entry point for generating QMP responses and events. Making it thread-safe lets virtio-blk-dataplane threads generate QMP events; because the same entry point is also used for responses, a response and an event will never be intertwined. Protection is inserted at both the qemu-char and monitor levels. A generic mutex is necessary in qemu_fe_chr_write so that qemu_chr_fe_write_all does not break its output; we reuse that mutex in some of the character devices. There is no need to protect against removal of the monitor's backend, since the monitor itself cannot be removed. Paolo Bonzini (6): qemu-char: introduce qemu_chr_alloc qemu-char: do not call chr_write directly qemu-char: move pty_chr_update_read_handler around qemu-char: make writes thread-safe monitor: protect outbuf with mutex monitor: protect event emission backends/baum.c | 2 +- backends/msmouse.c | 2 +- include/sysemu/char.h | 20 ++++++-- monitor.c | 55 ++++++++++++++++++---- qemu-char.c | 125 +++++++++++++++++++++++++++++++++----------------- spice-qemu-char.c | 2 +- ui/console.c | 2 +- 7 files changed, 149 insertions(+), 59 deletions(-) -- 1.8.3.1