summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-03-14 01:56:17 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:37:01 +0000
commit05da1266a09a5e958868ca5bdb479f25e275ea6b (patch)
tree895ce7d3565ad99b0e369fbe171759d1bc57df28
parentfa7932782af1144b41c1a049e16c44fb5bfbe1a2 (diff)
downloadcrosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.tar
crosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.tar.gz
crosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.tar.bz2
crosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.tar.lz
crosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.tar.xz
crosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.tar.zst
crosvm-05da1266a09a5e958868ca5bdb479f25e275ea6b.zip
queue_max_sizes
-rw-r--r--devices/src/virtio/controller.rs15
-rw-r--r--src/wl.rs7
2 files changed, 21 insertions, 1 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs
index 22e2850..8ed0a3a 100644
--- a/devices/src/virtio/controller.rs
+++ b/devices/src/virtio/controller.rs
@@ -106,6 +106,8 @@ pub enum MsgOnSocketRequest {
 
 #[derive(Debug, Serialize, Deserialize)]
 pub enum BincodeRequest {
+    QueueMaxSizes,
+
     ReadConfig { offset: u64, len: usize },
     WriteConfig { offset: u64, data: Vec<u8> },
 
@@ -137,6 +139,8 @@ pub enum MsgOnSocketResponse {
 
 #[derive(Debug, Deserialize, Serialize)]
 pub enum BincodeResponse {
+    QueueMaxSizes(Vec<u16>),
+
     ReadConfig(Vec<u8>),
 
     GetDeviceBars(Vec<PciBarConfiguration>),
@@ -332,7 +336,16 @@ impl VirtioDevice for Controller {
     }
 
     fn queue_max_sizes(&self) -> Vec<u16> {
-        QUEUE_SIZES.to_vec()
+        if let Err(e) = self.socket.send(BincodeRequest::QueueMaxSizes) {
+            panic!("failed to send QueueMaxSizes: {}", e);
+        }
+
+        match self.socket.recv_bincode() {
+            Ok(BincodeResponse::QueueMaxSizes(sizes)) => sizes,
+            response => {
+                panic!("bad response to Reset: {:?}", response);
+            }
+        }
     }
 
     fn features(&self) -> u64 {
diff --git a/src/wl.rs b/src/wl.rs
index 8cc2aa4..5e5c0e6 100644
--- a/src/wl.rs
+++ b/src/wl.rs
@@ -62,6 +62,13 @@ fn main() {
                 }
             }
 
+            Ok(Bincode(BincodeRequest::QueueMaxSizes)) => {
+                let result = wl.queue_max_sizes();
+                if let Err(e) = msg_socket.send(BincodeResponse::QueueMaxSizes(result)) {
+                    panic!("responding to QueueMaxSizes failed: {}", e);
+                }
+            }
+
             Ok(MsgOnSocket(MsgOnSocketRequest::Features)) => {
                 let result = wl.features();
                 if let Err(e) = msg_socket.send(MsgOnSocketResponse::Features(result)) {