summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Riley <davidriley@chromium.org>2019-01-28 11:25:10 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-30 01:25:56 -0800
commitd48445eae05629371e25409fede29fcaf3fe5631 (patch)
tree8f6ee9ff17000ced9fa2a378f94150cc8e6c56f7
parentf7797d15b492046df49670c166b175fa28e7ed8b (diff)
downloadcrosvm-d48445eae05629371e25409fede29fcaf3fe5631.tar
crosvm-d48445eae05629371e25409fede29fcaf3fe5631.tar.gz
crosvm-d48445eae05629371e25409fede29fcaf3fe5631.tar.bz2
crosvm-d48445eae05629371e25409fede29fcaf3fe5631.tar.lz
crosvm-d48445eae05629371e25409fede29fcaf3fe5631.tar.xz
crosvm-d48445eae05629371e25409fede29fcaf3fe5631.tar.zst
crosvm-d48445eae05629371e25409fede29fcaf3fe5631.zip
devices: gpu: name gpu thread
BUG=chromium:925590
TEST=pstree

Change-Id: I2f591894db2a40a812f1720e1fc8422049d85902
Reviewed-on: https://chromium-review.googlesource.com/1440031
Commit-Ready: David Riley <davidriley@chromium.org>
Tested-by: David Riley <davidriley@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: David Riley <davidriley@chromium.org>
-rw-r--r--devices/src/virtio/gpu/mod.rs102
-rw-r--r--seccomp/x86_64/gpu_device.policy2
2 files changed, 57 insertions, 47 deletions
diff --git a/devices/src/virtio/gpu/mod.rs b/devices/src/virtio/gpu/mod.rs
index 6974e08..43681b3 100644
--- a/devices/src/virtio/gpu/mod.rs
+++ b/devices/src/virtio/gpu/mod.rs
@@ -18,7 +18,7 @@ use std::path::{Path, PathBuf};
 use std::rc::Rc;
 use std::sync::atomic::{AtomicUsize, Ordering};
 use std::sync::Arc;
-use std::thread::spawn;
+use std::thread;
 use std::time::Duration;
 
 use data_model::*;
@@ -737,55 +737,63 @@ impl VirtioDevice for Gpu {
         let cursor_queue = queues.remove(0);
         let cursor_evt = queue_evts.remove(0);
         let socket_path = self.wayland_socket_path.clone();
-        spawn(move || {
-            const UNDESIRED_CARDS: &[&str] = &["vgem", "pvr"];
-            let drm_card = match gpu_buffer::rendernode::open_device(UNDESIRED_CARDS) {
-                Ok(f) => f,
-                Err(e) => {
-                    error!("failed to open card: {:?}", e);
-                    return;
-                }
-            };
+        let worker_result =
+            thread::Builder::new()
+                .name("virtio_gpu".to_string())
+                .spawn(move || {
+                    const UNDESIRED_CARDS: &[&str] = &["vgem", "pvr"];
+                    let drm_card = match gpu_buffer::rendernode::open_device(UNDESIRED_CARDS) {
+                        Ok(f) => f,
+                        Err(e) => {
+                            error!("failed to open card: {:?}", e);
+                            return;
+                        }
+                    };
 
-            let device = match Device::new(drm_card) {
-                Ok(d) => d,
-                Err(()) => {
-                    error!("failed to open device");
-                    return;
-                }
-            };
+                    let device = match Device::new(drm_card) {
+                        Ok(d) => d,
+                        Err(()) => {
+                            error!("failed to open device");
+                            return;
+                        }
+                    };
 
-            let display = match GpuDisplay::new(socket_path) {
-                Ok(c) => c,
-                Err(e) => {
-                    error!("failed to open display: {:?}", e);
-                    return;
-                }
-            };
+                    let display = match GpuDisplay::new(socket_path) {
+                        Ok(c) => c,
+                        Err(e) => {
+                            error!("failed to open display: {:?}", e);
+                            return;
+                        }
+                    };
 
-            let renderer = match Renderer::init() {
-                Ok(r) => r,
-                Err(e) => {
-                    error!("failed to initialize gpu renderer: {}", e);
-                    return;
-                }
-            };
+                    let renderer = match Renderer::init() {
+                        Ok(r) => r,
+                        Err(e) => {
+                            error!("failed to initialize gpu renderer: {}", e);
+                            return;
+                        }
+                    };
+
+                    Worker {
+                        exit_evt,
+                        mem,
+                        interrupt_evt,
+                        interrupt_resample_evt,
+                        interrupt_status,
+                        ctrl_queue,
+                        ctrl_evt,
+                        cursor_queue,
+                        cursor_evt,
+                        resource_bridge,
+                        kill_evt,
+                        state: Frontend::new(Backend::new(device, display, renderer)),
+                    }
+                    .run()
+                });
 
-            Worker {
-                exit_evt,
-                mem,
-                interrupt_evt,
-                interrupt_resample_evt,
-                interrupt_status,
-                ctrl_queue,
-                ctrl_evt,
-                cursor_queue,
-                cursor_evt,
-                resource_bridge,
-                kill_evt,
-                state: Frontend::new(Backend::new(device, display, renderer)),
-            }
-            .run()
-        });
+        if let Err(e) = worker_result {
+            error!("failed to spawn virtio_gpu worker: {}", e);
+            return;
+        }
     }
 }
diff --git a/seccomp/x86_64/gpu_device.policy b/seccomp/x86_64/gpu_device.policy
index 60b2d33..a5a37ba 100644
--- a/seccomp/x86_64/gpu_device.policy
+++ b/seccomp/x86_64/gpu_device.policy
@@ -57,3 +57,5 @@ memfd_create: arg1 == 3
 ftruncate: 1
 fcntl: arg1 == F_DUPFD_CLOEXEC
 lstat: 1
+# Allow PR_SET_NAME only.
+prctl: arg0 == 15