summary refs log tree commit diff
path: root/src/plugin/process.rs
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2018-10-09 12:44:21 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-10-11 13:25:38 -0700
commitdb6edff22f8bddabd6985c11a8f9456d2bc21c1f (patch)
treebea5a65c92d3eed9e878a6b1cd6064a094d29a38 /src/plugin/process.rs
parent9357ceab6ac207498fc2cff4be70aa6975e9c79f (diff)
downloadcrosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.tar
crosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.tar.gz
crosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.tar.bz2
crosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.tar.lz
crosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.tar.xz
crosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.tar.zst
crosvm-db6edff22f8bddabd6985c11a8f9456d2bc21c1f.zip
kvm: refactor ioeventfd datamatch interface
This allows the caller to specify the full range of datamatch options
defined in the KVM ioeventfd API, including matching accesses of a
particular size with or without matching a specific data value.

BUG=None
TEST=cargo test -p kvm

Change-Id: I28b543f7c0b35eb2a6d47a14a33145ea00d09d1d
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1271836
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'src/plugin/process.rs')
-rw-r--r--src/plugin/process.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/plugin/process.rs b/src/plugin/process.rs
index c99e3b6..c46b835 100644
--- a/src/plugin/process.rs
+++ b/src/plugin/process.rs
@@ -23,7 +23,7 @@ use protobuf;
 use protobuf::Message;
 
 use io_jail::Minijail;
-use kvm::{dirty_log_bitmap_size, IoeventAddress, IrqRoute, IrqSource, NoDatamatch, PicId, Vm};
+use kvm::{dirty_log_bitmap_size, Datamatch, IoeventAddress, IrqRoute, IrqSource, PicId, Vm};
 use kvm_sys::{kvm_ioapic_state, kvm_pic_state, kvm_pit_state2};
 use plugin_proto::*;
 use sys_util::{
@@ -289,11 +289,17 @@ impl Process {
             AddressSpace::MMIO => IoeventAddress::Mmio(io_event.address),
         };
         match io_event.length {
-            0 => vm.register_ioevent(&evt, addr, NoDatamatch)?,
-            1 => vm.register_ioevent(&evt, addr, io_event.datamatch as u8)?,
-            2 => vm.register_ioevent(&evt, addr, io_event.datamatch as u16)?,
-            4 => vm.register_ioevent(&evt, addr, io_event.datamatch as u32)?,
-            8 => vm.register_ioevent(&evt, addr, io_event.datamatch as u64)?,
+            0 => vm.register_ioevent(&evt, addr, Datamatch::AnyLength)?,
+            1 => vm.register_ioevent(&evt, addr, Datamatch::U8(Some(io_event.datamatch as u8)))?,
+            2 => {
+                vm.register_ioevent(&evt, addr, Datamatch::U16(Some(io_event.datamatch as u16)))?
+            }
+            4 => {
+                vm.register_ioevent(&evt, addr, Datamatch::U32(Some(io_event.datamatch as u32)))?
+            }
+            8 => {
+                vm.register_ioevent(&evt, addr, Datamatch::U64(Some(io_event.datamatch as u64)))?
+            }
             _ => return Err(SysError::new(EINVAL)),
         };