diff --git a/qemu-virtio-console-unconnected-pty.patch b/qemu-virtio-console-unconnected-pty.patch new file mode 100644 index 0000000..7b95b82 --- /dev/null +++ b/qemu-virtio-console-unconnected-pty.patch @@ -0,0 +1,47 @@ +commit ed8e5a85a1741147ce06932b478a509ce3407061 +Author: Christian Borntraeger +Date: Thu Dec 29 13:47:43 2011 +0100 + + virtio-console: Fix failure on unconnected pty + + when I tried qemu with -virtio-console pty the guest hangs and attaching + on /dev/pts/ does not return anything if the attachment is too late. + + This results in pty_chr_write() returning 0, which causes the port to + get throttled. This results in the guest getting frozen as the + guest->host virtio_console writes don't return until the host releases + the vq element back to the guest. + + For the virtio-serial use case we don't want to lose data but for the + console case we better drop data instead of "killing" the guest + console. If we get chardev->frontend notification and a better behaving + virtio-console we can revert this fix. + + Signed-off-by: Christian Borntraeger + Signed-off-by: Amit Shah + +diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c +index fe0233f..3a9004a 100644 +--- a/hw/virtio-serial-bus.c ++++ b/hw/virtio-serial-bus.c +@@ -163,7 +163,19 @@ static void do_flush_queued_data(VirtIOSerialPort *port, VirtQueue *vq, + abort(); + } + if (ret == -EAGAIN || (ret >= 0 && ret < buf_size)) { +- virtio_serial_throttle_port(port, true); ++ /* ++ * this is a temporary check until chardevs can signal to ++ * frontends that they are writable again. This prevents ++ * the console from going into throttled mode (forever) ++ * if virtio-console is connected to a pty without a ++ * listener. Otherwise the guest spins forever. ++ * We can revert this if ++ * 1: chardevs can notify frondends ++ * 2: the guest driver does not spin in these cases ++ */ ++ if (!info->is_console) { ++ virtio_serial_throttle_port(port, true); ++ } + port->iov_idx = i; + if (ret > 0) { + port->iov_offset += ret; diff --git a/qemu.spec b/qemu.spec index 0dc6eef..1cb916c 100644 --- a/qemu.spec +++ b/qemu.spec @@ -1,7 +1,7 @@ Summary: QEMU is a FAST! processor emulator Name: qemu Version: 0.15.1 -Release: 5%{?dist} +Release: 6%{?dist} # Epoch because we pushed a qemu-1.0 package Epoch: 2 License: GPLv2+ and LGPLv2+ and BSD @@ -86,6 +86,8 @@ Patch101: 0101-usb-hub-dont_trigger_assert_on_packet_completion.patch Patch102: %{name}-CVE-2012-0029.patch # virtio-blk: refuse SG_IO requests with scsi=off (bz 826042) Patch103: %{name}-virtio-blk_refuse_SG_IO_requests_with_scsi_off.patch +# Fix fedora guest hang with virtio console (bz 837925) +Patch104: %{name}-virtio-console-unconnected-pty.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: SDL-devel zlib-devel which texi2html gnutls-devel cyrus-sasl-devel @@ -341,6 +343,7 @@ such as kvm_stat. %patch101 -p1 %patch102 -p1 %patch103 -p1 +%patch104 -p1 %build # By default we build everything, but allow x86 to build a minimal version @@ -721,6 +724,9 @@ fi %{_mandir}/man1/qemu-img.1* %changelog +* Wed Jul 18 2012 Cole Robinson - 0.15.1-6 +- Fix fedora guest hang with virtio console (bz 837925) + * Tue May 29 2012 Cole Robinson - 0.15.1-5 - CVE-2012-0029 e1000 buffer overflow (bz 783984, bz 772075) - virtio-blk: refuse SG_IO requests with scsi=off (bz 826042)