summary refs log tree commit diff
path: root/src/plugin/mod.rs
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2018-10-11 18:12:46 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-10-12 23:07:10 -0700
commit7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a (patch)
tree9e5907ddb9f2420e6bf76b2f4d9c0a17c499f8ca /src/plugin/mod.rs
parent73a40e37a338e43b33daf823a3dbb46444bfcdce (diff)
downloadcrosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.tar
crosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.tar.gz
crosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.tar.bz2
crosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.tar.lz
crosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.tar.xz
crosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.tar.zst
crosvm-7c78a3c9484fe0cf5669fb28f9f7ec68f9b7550a.zip
kvm: fix clippy error about multiple mut references
TEST=cargo test -p kvm
BUG=None

Change-Id: I2d4552b693f253f8411199ecf4583553c80e37a6
Reviewed-on: https://chromium-review.googlesource.com/1277874
Commit-Ready: Zach Reizner <zachr@chromium.org>
Tested-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'src/plugin/mod.rs')
-rw-r--r--src/plugin/mod.rs47
1 files changed, 39 insertions, 8 deletions
diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs
index 8cd81b4..9f229ac 100644
--- a/src/plugin/mod.rs
+++ b/src/plugin/mod.rs
@@ -363,17 +363,48 @@ pub fn run_vcpus(
                             let run_res = vcpu.run();
                             match run_res {
                                 Ok(run) => match run {
-                                    VcpuExit::IoIn(addr, data) => {
-                                        vcpu_plugin.io_read(addr as u64, data, &vcpu);
+                                    VcpuExit::IoIn { port, mut size } => {
+                                        let mut data = [0; 8];
+                                        if size > data.len() {
+                                            error!("unsupported IoIn size of {} bytes", size);
+                                            size = data.len();
+                                        }
+                                        vcpu_plugin.io_read(port as u64, &mut data[..size], &vcpu);
+                                        if let Err(e) = vcpu.set_data(&data[..size]) {
+                                            error!("failed to set return data for IoIn: {:?}", e);
+                                        }
                                     }
-                                    VcpuExit::IoOut(addr, data) => {
-                                        vcpu_plugin.io_write(addr as u64, data, &vcpu);
+                                    VcpuExit::IoOut {
+                                        port,
+                                        mut size,
+                                        data,
+                                    } => {
+                                        if size > data.len() {
+                                            error!("unsupported IoOut size of {} bytes", size);
+                                            size = data.len();
+                                        }
+                                        vcpu_plugin.io_write(port as u64, &data[..size], &vcpu);
                                     }
-                                    VcpuExit::MmioRead(addr, data) => {
-                                        vcpu_plugin.mmio_read(addr as u64, data, &vcpu);
+                                    VcpuExit::MmioRead { address, mut size } => {
+                                        let mut data = [0; 8];
+                                        vcpu_plugin.mmio_read(
+                                            address as u64,
+                                            &mut data[..size],
+                                            &vcpu,
+                                        );
+                                        // Setting data for mmio can not fail.
+                                        let _ = vcpu.set_data(&data[..size]);
                                     }
-                                    VcpuExit::MmioWrite(addr, data) => {
-                                        vcpu_plugin.mmio_write(addr as u64, data, &vcpu);
+                                    VcpuExit::MmioWrite {
+                                        address,
+                                        size,
+                                        data,
+                                    } => {
+                                        vcpu_plugin.mmio_write(
+                                            address as u64,
+                                            &data[..size],
+                                            &vcpu,
+                                        );
                                     }
                                     VcpuExit::Hlt => break,
                                     VcpuExit::Shutdown => break,