summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-03-13 23:55:04 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:36:47 +0000
commitc11d38c9d7101de4b2bf8421fb9242f929debf70 (patch)
tree93680e9477c109cee3a7ed2027817ca0a74b961a
parentf97762597454c90a9671a3e5eb8d8a59b466e659 (diff)
downloadcrosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.tar
crosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.tar.gz
crosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.tar.bz2
crosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.tar.lz
crosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.tar.xz
crosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.tar.zst
crosvm-c11d38c9d7101de4b2bf8421fb9242f929debf70.zip
reset
-rw-r--r--devices/src/virtio/controller.rs22
-rw-r--r--src/wl.rs11
2 files changed, 30 insertions, 3 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs
index 4a770cc..2fe8488 100644
--- a/devices/src/virtio/controller.rs
+++ b/devices/src/virtio/controller.rs
@@ -65,6 +65,8 @@ pub enum MsgOnSocketRequest {
         out_queue_evt: MaybeOwnedFd<EventFd>,
     },
 
+    Reset,
+
     Kill,
 }
 
@@ -90,6 +92,7 @@ impl From<BincodeRequest> for Request {
 
 #[derive(Debug, MsgOnSocket)]
 pub enum MsgOnSocketResponse {
+    Reset(bool),
     Kill,
 }
 
@@ -151,7 +154,9 @@ impl Worker {
                 self.shutdown = true;
             }
 
-            Ok(Bincode(BincodeResponse)) => unreachable!(),
+            Ok(msg) => {
+                panic!("unexpected message received: {:?}", msg);
+            }
 
             Err(e) => {
                 error!("recv failed: {:?}", e);
@@ -371,4 +376,19 @@ impl VirtioDevice for Controller {
             }
         }
     }
+
+    fn reset(&mut self) -> bool {
+        if let Err(e) = self.socket.send(MsgOnSocketRequest::Reset) {
+            error!("failed to send Reset: {}", e);
+            return false;
+        }
+
+        match self.socket.recv_msg_on_socket() {
+            Ok(MsgOnSocketResponse::Reset(result)) => result,
+            response => {
+                error!("bad response to Reset: {:?}", response);
+                false
+            }
+        }
+    }
 }
diff --git a/src/wl.rs b/src/wl.rs
index 0a8bd0a..169edb2 100644
--- a/src/wl.rs
+++ b/src/wl.rs
@@ -60,7 +60,7 @@ fn main() {
                 drop(wl);
 
                 if let Err(e) = msg_socket.send(MsgOnSocketResponse::Kill) {
-                    error!("failed to send Response::Kill: {}", e);
+                    error!("responding to Kill failed: {}", e);
                 }
 
                 break;
@@ -72,7 +72,7 @@ fn main() {
                 let mut data = vec![0; len];
                 wl.read_config(offset, &mut data);
                 if let Err(e) = msg_socket.send(BincodeResponse::ReadConfig(data)) {
-                    panic!("replying to ReadConfig failed: {}", e);
+                    panic!("responding to ReadConfig failed: {}", e);
                 }
             }
 
@@ -111,6 +111,13 @@ fn main() {
                 println!("activated Wl");
             }
 
+            Ok(MsgOnSocket(MsgOnSocketRequest::Reset)) => {
+                let result = wl.reset();
+                if let Err(e) = msg_socket.send(MsgOnSocketResponse::Reset(result)) {
+                    panic!("responding to Reset failed: {}", e);
+                }
+            }
+
             Ok(MsgOnSocket(msg @ MsgOnSocketRequest::Create { .. })) => {
                 panic!("unexpected message {:?}", msg)
             }