diff options
author | Slava Malyugin <slavamn@google.com> | 2018-07-06 09:52:05 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-07-11 18:48:50 -0700 |
commit | d1e391b8d490621974eee8b1d6464eac1f9c1bb3 (patch) | |
tree | 6888f52768606e3f5bfc6510203e959f0b0bc89c /crosvm_plugin/src | |
parent | cc08cdbd836cb280cebcb5f1d737da58aa3eff07 (diff) | |
download | crosvm-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')
-rw-r--r-- | crosvm_plugin/src/lib.rs | 28 |
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) +} |