diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-03-12 07:15:24 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-06-15 09:36:26 +0000 |
commit | 4bd2427f8f449748cf1425f81da0b41da50821a7 (patch) | |
tree | 98330f4b5f4ff5ab783edbccd112216cb4bd317b /src | |
parent | a24b1e1c1d287b5de7946a6225f2ef9326c433b3 (diff) | |
download | crosvm-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.rs | 6 | ||||
-rw-r--r-- | src/wl.rs | 39 |
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), } } } |