diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2018-10-09 12:44:21 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-10-11 13:25:38 -0700 |
commit | db6edff22f8bddabd6985c11a8f9456d2bc21c1f (patch) | |
tree | bea5a65c92d3eed9e878a6b1cd6064a094d29a38 /src/plugin/process.rs | |
parent | 9357ceab6ac207498fc2cff4be70aa6975e9c79f (diff) | |
download | crosvm-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.rs | 18 |
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)), }; |