On s390 one can observe system hang situations wrt console input when using 'dataplane=on'.
dataplane processing causes an inactive main thread and an active dataplane thread. When a character backend descriptor disappears from the main thread's poll() descriptor array (when can_read() returns 0) it happens that it will never reappear in the poll() array due to missing poll() interrupts. The following patches fix observed hangs on s390 and provide a means to avoid potential hangs in other backends/frontends. The command line to reproduce the hang on s390: qemu-system-s390x -machine s390-ccw-virtio,accel=kvm,usb=off,kernel_irqchip=on -m 1024 -realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 -rtc base=utc -drive file=/dev/disk/by-path/ccw-0.0.e7ac,if=none,id=drive-virtio-disk0, format=raw,werror=report,rerror=report,cache=none,aio=native -device virtio-blk-ccw,ioeventfd=on,scsi=off,config-wce=off,devno=fe.0.0001, drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1,x-data-plane=on -kernel /guest/vmlinux -append "root=/dev/vda1 console=ttyS0" -chardev stdio,id=sclpcon1,mux=off -device sclplmconsole,chardev=sclpcon1 -nographic -nodefaults Patch 1: Adds timeout to poll() when a frontend returned -EAGAIN on 'can_read'. Patch 2: The SCLP line mode console now returns -EAGAIN on 'can_read' to fix a hang after the backend descriptor disappeared forever from the poll() descriptor array. Patch 3: The ASCII console now returns -EAGAIN on 'can_read' to avoid a potential hang. Heinz Graalfs (3): char: Trigger timeouts on poll() when frontend is unready s390x: Fix hanging SCLP line mode console s390x: Avoid hanging SCLP ASCII console hw/char/sclpconsole-lm.c | 4 ++-- hw/char/sclpconsole.c | 7 ++++++- qemu-char.c | 27 ++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) -- 1.8.3.1