When the IO thread calls monitor_flush() repeatedly & quickly in succession, outside of callback context, many redundant G_IO_OUT watches are installed. (One such caller is the "info tlb" / tlb_info() HMP command which produces a lot of monitor output.)
While this redundancy is no problem in itself, it can trigger -1/EINVAL in poll() by growing "gpollfds" beyond limits. This is a persistent condition, causing qemu to spin in the main loop. Patch #2 corrects this. My first stab at a fix was patch #1. Although in retrospect probably unrelated to the main problem, I'm including it because it should qualify as an improvement / cleanup in its own right. See <https://bugzilla.redhat.com/show_bug.cgi?id=970047> for more details. Laszlo Ersek (2): char: io_channel_send: don't lose written bytes monitor: maintain at most one G_IO_OUT watch monitor.c | 11 +++++++++-- qemu-char.c | 41 +++++++++++++++++++---------------------- 2 files changed, 28 insertions(+), 24 deletions(-)