summary refs log tree commit diff
path: root/crosvm_plugin/src/lib.rs
diff options
context:
space:
mode:
authorSlava Malyugin <slavamn@google.com>2018-07-06 09:52:05 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-07-11 18:48:50 -0700
commitd1e391b8d490621974eee8b1d6464eac1f9c1bb3 (patch)
tree6888f52768606e3f5bfc6510203e959f0b0bc89c /crosvm_plugin/src/lib.rs
parentcc08cdbd836cb280cebcb5f1d737da58aa3eff07 (diff)
downloadcrosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.tar
crosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.tar.gz
crosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.tar.bz2
crosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.tar.lz
crosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.tar.xz
crosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.tar.zst
crosvm-d1e391b8d490621974eee8b1d6464eac1f9c1bb3.zip
plugin: allow retrieving and setting VCPU events
Add crosvm plugin API to allow fetching and setting VCPU events.

BUG=b:110056268
TEST=cargo test --features plugin -p kvm

Change-Id: Id66230f180f4bdb95bd1850ed050e439083701cc
Reviewed-on: https://chromium-review.googlesource.com/1128045
Commit-Ready: Slava Malyugin <slavamn@chromium.org>
Tested-by: Slava Malyugin <slavamn@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'crosvm_plugin/src/lib.rs')
-rw-r--r--crosvm_plugin/src/lib.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/crosvm_plugin/src/lib.rs b/crosvm_plugin/src/lib.rs
index 231ee25..24d99ca 100644
--- a/crosvm_plugin/src/lib.rs
+++ b/crosvm_plugin/src/lib.rs
@@ -46,7 +46,7 @@ use kvm::dirty_log_bitmap_size;
 
 use kvm_sys::{kvm_regs, kvm_sregs, kvm_fpu, kvm_debugregs, kvm_xcrs, kvm_msr_entry,
               kvm_cpuid_entry2, kvm_lapic_state, kvm_mp_state, kvm_pic_state, kvm_ioapic_state,
-              kvm_pit_state2};
+              kvm_pit_state2, kvm_vcpu_events};
 
 use plugin_proto::*;
 
@@ -172,6 +172,8 @@ enum Stat {
     VcpuSetLapicState,
     VcpuGetMpState,
     VcpuSetMpState,
+    VcpuGetVcpuEvents,
+    VcpuSetVcpuEvents,
     NewConnection,
 
     Count,
@@ -1487,3 +1489,27 @@ pub unsafe extern "C" fn crosvm_vcpu_set_mp_state(this: *mut crosvm_vcpu,
     let ret = this.set_state(VcpuRequest_StateSet::MP, state);
     to_crosvm_rc(ret)
 }
+
+#[no_mangle]
+pub unsafe extern "C" fn crosvm_vcpu_get_vcpu_events(this: *mut crosvm_vcpu,
+                                                     events: *mut kvm_vcpu_events)
+                                                     -> c_int {
+    let _u = STATS.record(Stat::VcpuGetVcpuEvents);
+    let this = &mut *this;
+    let events = from_raw_parts_mut(events as *mut u8,
+                                    size_of::<kvm_vcpu_events>());
+    let ret = this.get_state(VcpuRequest_StateSet::EVENTS, events);
+    to_crosvm_rc(ret)
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn crosvm_vcpu_set_vcpu_events(this: *mut crosvm_vcpu,
+                                                     events: *const kvm_vcpu_events)
+                                                     -> c_int {
+    let _u = STATS.record(Stat::VcpuSetVcpuEvents);
+    let this = &mut *this;
+    let events = from_raw_parts(events as *mut u8,
+                                size_of::<kvm_vcpu_events>());
+    let ret = this.set_state(VcpuRequest_StateSet::EVENTS, events);
+    to_crosvm_rc(ret)
+}