summaryrefslogtreecommitdiffstats
path: root/chardev
diff options
context:
space:
mode:
authorDr. David Alan Gilbert2018-02-26 14:04:52 +0100
committerPaolo Bonzini2018-07-02 15:41:18 +0200
commit76b004d10da09bb77a4343edf7b98b2d662fb4f2 (patch)
treeb5fa2752233f9445b8d9b3a369c16d347feaec7c /chardev
parentbsd-user: Use the IEC binary prefix definitions (diff)
downloadqemu-76b004d10da09bb77a4343edf7b98b2d662fb4f2.tar.gz
qemu-76b004d10da09bb77a4343edf7b98b2d662fb4f2.tar.xz
qemu-76b004d10da09bb77a4343edf7b98b2d662fb4f2.zip
serial: Open non-block
On a real serial device, the open can block if the handshake lines are in a particular state. If a QEMU is passing the serial device to the guest, the QEMU startup is blocked opening the device (with a symptom seen as a timeout from libvirt). Open the serial port with O_NONBLOCK. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'chardev')
-rw-r--r--chardev/char-serial.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/chardev/char-serial.c b/chardev/char-serial.c
index ae548d28da..3299b46853 100644
--- a/chardev/char-serial.c
+++ b/chardev/char-serial.c
@@ -265,7 +265,8 @@ static void qmp_chardev_open_serial(Chardev *chr,
ChardevHostdev *serial = backend->u.serial.data;
int fd;
- fd = qmp_chardev_open_file_source(serial->device, O_RDWR, errp);
+ fd = qmp_chardev_open_file_source(serial->device, O_RDWR | O_NONBLOCK,
+ errp);
if (fd < 0) {
return;
}