summary refs log tree commit diff
path: root/devices/src/virtio/gpu/mod.rs
diff options
context:
space:
mode:
authorGurchetan Singh <gurchetansingh@chromium.org>2019-12-18 18:14:44 -0800
committerCommit Bot <commit-bot@chromium.org>2019-12-20 23:45:39 +0000
commit78f6d4b1348385f1d6d80829448d5c159cc90dbe (patch)
treec17487d70b10955aa0909a6f118233e2aaeb3053 /devices/src/virtio/gpu/mod.rs
parentd0e2a253de141373be9f9f0c7f9c66589fab7f70 (diff)
downloadcrosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.tar
crosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.tar.gz
crosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.tar.bz2
crosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.tar.lz
crosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.tar.xz
crosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.tar.zst
crosvm-78f6d4b1348385f1d6d80829448d5c159cc90dbe.zip
devices: gpu: remove hung display from PollEvents
This display isn't typically used when the virt-wl device is
available and it can lead to hung fds during plug/unplug with
external displays and docks.

BUG=chromium:1027379, chromium:1027447
TEST=
Tested five times each on R79-12607.47.0 sarien:
  => without patch --> CPU usage goes to 100% after unplug
  => with patch --> CPU usages remains normal

Change-Id: Iea57f05002acc661f36b180e9e88c37b1f1b9047
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1977100
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org>
Diffstat (limited to 'devices/src/virtio/gpu/mod.rs')
-rw-r--r--devices/src/virtio/gpu/mod.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/devices/src/virtio/gpu/mod.rs b/devices/src/virtio/gpu/mod.rs
index 83031c8..27a361a 100644
--- a/devices/src/virtio/gpu/mod.rs
+++ b/devices/src/virtio/gpu/mod.rs
@@ -511,7 +511,7 @@ struct Worker {
 
 impl Worker {
     fn run(&mut self) {
-        #[derive(PollToken)]
+        #[derive(PartialEq, PollToken)]
         enum Token {
             CtrlQueue,
             CursorQueue,
@@ -574,6 +574,14 @@ impl Worker {
             process_resource_bridge.clear();
             process_resource_bridge.resize(self.resource_bridges.len(), false);
 
+            // This display isn't typically used when the virt-wl device is available and it can
+            // lead to hung fds (crbug.com/1027379). Disable if it's hung.
+            for event in events.iter_hungup() {
+                if event.token() == Token::Display {
+                    let _ = poll_ctx.delete(&*self.state.display().borrow());
+                }
+            }
+
             for event in events.iter_readable() {
                 match event.token() {
                     Token::CtrlQueue => {