- virtio_console: Fix poll/select blocking even though there is data to read
This commit is contained in:
parent
6d1d3d62c3
commit
e34bb01b5f
@ -647,6 +647,7 @@ Patch800: linux-2.6-crash-driver.patch
|
|||||||
|
|
||||||
# virt + ksm patches
|
# virt + ksm patches
|
||||||
Patch1555: fix_xen_guest_on_old_EC2.patch
|
Patch1555: fix_xen_guest_on_old_EC2.patch
|
||||||
|
Patch1556: linux-2.6.35.4-virtio_console-fix-poll.patch
|
||||||
|
|
||||||
# DRM
|
# DRM
|
||||||
Patch1801: drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch
|
Patch1801: drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch
|
||||||
@ -1243,6 +1244,7 @@ ApplyPatch linux-2.6-crash-driver.patch
|
|||||||
|
|
||||||
# Assorted Virt Fixes
|
# Assorted Virt Fixes
|
||||||
ApplyPatch fix_xen_guest_on_old_EC2.patch
|
ApplyPatch fix_xen_guest_on_old_EC2.patch
|
||||||
|
ApplyPatch linux-2.6.35.4-virtio_console-fix-poll.patch
|
||||||
|
|
||||||
#ApplyPatch drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch
|
#ApplyPatch drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch
|
||||||
#ApplyPatch revert-drm-kms-toggle-poll-around-switcheroo.patch
|
#ApplyPatch revert-drm-kms-toggle-poll-around-switcheroo.patch
|
||||||
@ -1904,6 +1906,9 @@ fi
|
|||||||
# || ||
|
# || ||
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Sep 15 2010 Hans de Goede <hdegoede@redhat.com>
|
||||||
|
- virtio_console: Fix poll/select blocking even though there is data to read
|
||||||
|
|
||||||
* Wed Sep 15 2010 Chuck Ebbert <cebbert@redhat.com> - 2.6.36-0.22.rc4.git2
|
* Wed Sep 15 2010 Chuck Ebbert <cebbert@redhat.com> - 2.6.36-0.22.rc4.git2
|
||||||
- Linux 2.6.36-rc4-git2
|
- Linux 2.6.36-rc4-git2
|
||||||
- Fix up add-appleir-usb-driver.patch after HID core changes.
|
- Fix up add-appleir-usb-driver.patch after HID core changes.
|
||||||
|
29
linux-2.6.35.4-virtio_console-fix-poll.patch
Normal file
29
linux-2.6.35.4-virtio_console-fix-poll.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Subject: virtio_console: Fix poll blocking even though there is data to read (version 2)
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
|
||||||
|
I found this while working on a Linux agent for spice, the symptom I was
|
||||||
|
seeing was select blocking on the spice vdagent virtio serial port even
|
||||||
|
though there were messages queued up there.
|
||||||
|
|
||||||
|
virtio_console's port_fops_poll checks port->inbuf != NULL to determine if
|
||||||
|
read won't block. However if an application reads enough bytes from inbuf
|
||||||
|
through port_fops_read, to empty the current port->inbuf, port->inbuf
|
||||||
|
will be NULL even though there may be buffers left in the virtqueue.
|
||||||
|
|
||||||
|
This causes poll() to block even though there is data ready to be read, this
|
||||||
|
patch fixes this by using port_has_data(port) instead of the
|
||||||
|
port->inbuf != NULL check.
|
||||||
|
|
||||||
|
Signed-off-By: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
diff -up linux-2.6.35.x86_64/drivers/char/virtio_console.c~ linux-2.6.35.x86_64/drivers/char/virtio_console.c
|
||||||
|
--- linux-2.6.35.x86_64/drivers/char/virtio_console.c~ 2010-08-02 00:11:14.000000000 +0200
|
||||||
|
+++ linux-2.6.35.x86_64/drivers/char/virtio_console.c 2010-09-15 13:39:29.043505000 +0200
|
||||||
|
@@ -642,7 +642,7 @@ static unsigned int port_fops_poll(struc
|
||||||
|
poll_wait(filp, &port->waitqueue, wait);
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
- if (port->inbuf)
|
||||||
|
+ if (port_has_data(port))
|
||||||
|
ret |= POLLIN | POLLRDNORM;
|
||||||
|
if (!will_write_block(port))
|
||||||
|
ret |= POLLOUT;
|
Loading…
Reference in New Issue
Block a user