diff options
Diffstat (limited to 'crosvm_plugin')
-rw-r--r-- | crosvm_plugin/Cargo.toml | 2 | ||||
-rw-r--r-- | crosvm_plugin/crosvm.h | 10 | ||||
-rw-r--r-- | crosvm_plugin/src/lib.rs | 28 |
3 files changed, 37 insertions, 3 deletions
diff --git a/crosvm_plugin/Cargo.toml b/crosvm_plugin/Cargo.toml index 3c61aa4..c203f4d 100644 --- a/crosvm_plugin/Cargo.toml +++ b/crosvm_plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crosvm_plugin" -version = "0.14.0" +version = "0.15.0" authors = ["The Chromium OS Authors"] [lib] diff --git a/crosvm_plugin/crosvm.h b/crosvm_plugin/crosvm.h index 42c979a..947a198 100644 --- a/crosvm_plugin/crosvm.h +++ b/crosvm_plugin/crosvm.h @@ -47,7 +47,7 @@ extern "C" { * do not indicate anything about what version of crosvm is running. */ #define CROSVM_API_MAJOR 0 -#define CROSVM_API_MINOR 13 +#define CROSVM_API_MINOR 15 #define CROSVM_API_PATCH 0 enum crosvm_address_space { @@ -525,6 +525,14 @@ int crosvm_vcpu_get_mp_state(struct crosvm_vcpu *, int crosvm_vcpu_set_mp_state(struct crosvm_vcpu *, const struct kvm_mp_state *__mp_state); +/* Gets currently pending exceptions, interrupts, NMIs, etc for VCPU. */ +int crosvm_vcpu_get_vcpu_events(struct crosvm_vcpu *, + struct kvm_vcpu_events *); + +/* Sets currently pending exceptions, interrupts, NMIs, etc for VCPU. */ +int crosvm_vcpu_set_vcpu_events(struct crosvm_vcpu *, + const struct kvm_vcpu_events *); + #ifdef __cplusplus } #endif 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) +} |