I wrote small code which reproduces this issue. https://bitbucket.org/redcap97/puts-hello-x80000-armv7-kernel/downloads /puts-HELLO-x80000
Above binary outputs "HELLO!" 80000 times to UART. # Please execute in terminal socat unix-listen:a.sock stdout | tee actual # Please execute in another terminal qemu-system-arm -M vexpress-a9 -nographic -kernel puts-HELLO-x80000 -serial unix:a.sock # Check results yes 'HELLO!' | head -n 80000 > expected diff -u expected actual Occasionally, a part of the output of qemu disappears. Source code of the binary https://bitbucket.org/redcap97/puts-hello-x80000-armv7-kernel/src -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1586756 Title: "-serial unix:" option of qemu-system-* is broken in qemu 2.6.0 Status in QEMU: Incomplete Bug description: I found a bug of "-serial unix:PATH_TO_SOCKET" in qemu 2.6.0 (qemu 2.5.1 works fine). Occasionally, a part of the output of qemu disappears in the bug. It looks like following commit is the cause: char: ensure all clients are in non-blocking mode (Author: Daniel P. Berrange <berra...@redhat.com>) http://git.qemu.org/?p=qemu.git;a=commitdiff;h=64c800f808748522727847b9cdc73412f22dffb9 In this commit, UNIX socket is set to non-blocking mode, but qemu_chr_fe_write function doesn't handle EAGAIN. You should fix code like that: --- diff --git a/qemu-char.c b/qemu-char.c index b597ee1..0361d78 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -270,6 +270,7 @@ static int qemu_chr_fe_write_buffer(CharDriverState *s, const uint8_t *buf, int int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len) { int ret; + int offset = 0; if (s->replay && replay_mode == REPLAY_MODE_PLAY) { int offset; @@ -280,7 +281,21 @@ int qemu_chr_fe_write(CharDriverState *s, const uint8_t *buf, int len) } qemu_mutex_lock(&s->chr_write_lock); - ret = s->chr_write(s, buf, len); + + while (offset < len) { + retry: + ret = s->chr_write(s, buf, len); + if (ret < 0 && errno == EAGAIN) { + g_usleep(100); + goto retry; + } + + if (ret <= 0) { + break; + } + + offset += ret; + } if (ret > 0) { qemu_chr_fe_write_log(s, buf, ret); --- Or please do "git revert 64c800f808748522727847b9cdc73412f22dffb9". To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1586756/+subscriptions