summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-03-12 07:15:24 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:36:26 +0000
commit4bd2427f8f449748cf1425f81da0b41da50821a7 (patch)
tree98330f4b5f4ff5ab783edbccd112216cb4bd317b /src
parenta24b1e1c1d287b5de7946a6225f2ef9326c433b3 (diff)
downloadcrosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.tar
crosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.tar.gz
crosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.tar.bz2
crosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.tar.lz
crosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.tar.xz
crosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.tar.zst
crosvm-4bd2427f8f449748cf1425f81da0b41da50821a7.zip
extract create message from activate
Diffstat (limited to 'src')
-rw-r--r--src/linux.rs6
-rw-r--r--src/wl.rs39
2 files changed, 24 insertions, 21 deletions
diff --git a/src/linux.rs b/src/linux.rs
index 411d529..6f0e19b 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -85,6 +85,7 @@ pub enum Error {
     BuildVm(<Arch as LinuxArch>::Error),
     ChownTpmStorage(sys_util::Error),
     CloneEventFd(sys_util::Error),
+    ControllerCreate(MsgError),
     CreateAc97(devices::PciDeviceError),
     CreateConsole(arch::serial::Error),
     CreateDiskError(disk::Error),
@@ -171,6 +172,7 @@ impl Display for Error {
             BuildVm(e) => write!(f, "The architecture failed to build the vm: {}", e),
             ChownTpmStorage(e) => write!(f, "failed to chown tpm storage: {}", e),
             CloneEventFd(e) => write!(f, "failed to clone eventfd: {}", e),
+            ControllerCreate(e) => write!(f, "failed to create device controller: {}", e),
             CreateAc97(e) => write!(f, "failed to create ac97 device: {}", e),
             CreateConsole(e) => write!(f, "failed to create console device: {}", e),
             CreateDiskError(e) => write!(f, "failed to create virtual disk: {}", e),
@@ -766,13 +768,13 @@ fn create_wayland_device(
     path.push_str("/crosvm-wl.sock");
     let seq_socket = UnixSeqpacket::connect(&path).expect("connect failed");
     let msg_socket = MsgSocket::new(seq_socket);
-    let dev = virtio::Controller::new(
+    let dev = virtio::Controller::create(
         cfg.wayland_socket_paths.clone(),
         socket,
         resource_bridge,
         msg_socket,
     )
-    .map_err(Error::WaylandDeviceNew)?;
+    .map_err(Error::ControllerCreate)?;
 
     let jail = match simple_jail(&cfg, "wl_device")? {
         Some(mut jail) => {
diff --git a/src/wl.rs b/src/wl.rs
index 1874929..77cf86c 100644
--- a/src/wl.rs
+++ b/src/wl.rs
@@ -5,7 +5,6 @@ use msg_socket::{MsgReceiver, MsgSender, MsgSocket};
 use std::collections::BTreeMap;
 use std::fs::remove_file;
 use sys_util::{error, net::UnixSeqpacketListener, warn, GuestMemory};
-use vm_control::VmMemoryControlRequestSocket;
 
 #[cfg(any(target_arch = "arm", target_arch = "aarch64"))]
 pub use aarch64::{arch_memory_regions, MemoryParams};
@@ -28,7 +27,22 @@ fn main() {
     let conn = server.accept().expect("accept failed");
     let msg_socket: Socket = MsgSocket::new(conn);
 
-    let mut wl = None;
+    let vm_socket = match msg_socket.recv() {
+        Ok(Request::Create { vm_socket }) => MsgSocket::new(vm_socket.owned()),
+
+        Ok(msg) => {
+            panic!("received unexpected message: {:?}", msg);
+        }
+
+        Err(e) => {
+            panic!("recv error: {}", e);
+        }
+    };
+
+    let mut wayland_paths = BTreeMap::new();
+    wayland_paths.insert("".into(), "/run/user/1000/wayland-0".into());
+
+    let mut wl = Some(Wl::new(wayland_paths, vm_socket, None).unwrap());
 
     loop {
         match msg_socket.recv() {
@@ -52,14 +66,9 @@ fn main() {
                 interrupt_resample_evt,
                 in_queue,
                 out_queue,
-                vm_socket,
                 in_queue_evt,
                 out_queue_evt,
             }) => {
-                if wl.is_some() {
-                    panic!("Received Activate twice");
-                }
-
                 let shm = shm.owned();
 
                 let regions = arch_memory_regions(MemoryParams {
@@ -71,16 +80,8 @@ fn main() {
 
                 let interrupt: MsgSocket<InterruptProxyEvent, ()> =
                     MsgSocket::new(interrupt.owned());
-                let vm_socket: VmMemoryControlRequestSocket = MsgSocket::new(vm_socket.owned());
-
-                let mut wayland_paths = BTreeMap::new();
-                wayland_paths.insert("".into(), "/run/user/1000/wayland-0".into());
-
-                let mut wl_ = Wl::new(wayland_paths, vm_socket, None).unwrap();
 
-                println!("constructed Wl");
-
-                wl_.activate(
+                wl.as_mut().unwrap().activate(
                     mem,
                     Box::new(InterruptProxy::new(
                         interrupt,
@@ -91,11 +92,11 @@ fn main() {
                 );
 
                 println!("activated Wl");
-
-                wl = Some(wl_);
             }
 
-            Err(e) => panic!("recv failed {:?}", e),
+            Ok(msg) => panic!("unexpected message {:?}", msg),
+
+            Err(e) => panic!("recv failed: {}", e),
         }
     }
 }