diff options
author | Gurchetan Singh <gurchetansingh@chromium.org> | 2019-12-18 18:14:44 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-12-20 23:45:39 +0000 |
commit | 78f6d4b1348385f1d6d80829448d5c159cc90dbe (patch) | |
tree | c17487d70b10955aa0909a6f118233e2aaeb3053 /devices/src/virtio/gpu/mod.rs | |
parent | d0e2a253de141373be9f9f0c7f9c66589fab7f70 (diff) | |
download | crosvm-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.rs | 10 |
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 => { |