diff options
Diffstat (limited to 'crosvm_plugin')
-rw-r--r-- | crosvm_plugin/Cargo.toml | 2 | ||||
-rw-r--r-- | crosvm_plugin/crosvm.h | 9 | ||||
-rw-r--r-- | crosvm_plugin/src/lib.rs | 31 |
3 files changed, 38 insertions, 4 deletions
diff --git a/crosvm_plugin/Cargo.toml b/crosvm_plugin/Cargo.toml index 9406912..2233b6d 100644 --- a/crosvm_plugin/Cargo.toml +++ b/crosvm_plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crosvm_plugin" -version = "0.16.0" +version = "0.17.0" authors = ["The Chromium OS Authors"] [lib] diff --git a/crosvm_plugin/crosvm.h b/crosvm_plugin/crosvm.h index 3f58739..81c8ade 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 16 +#define CROSVM_API_MINOR 17 #define CROSVM_API_PATCH 0 enum crosvm_address_space { @@ -252,6 +252,13 @@ int crosvm_get_pit_state(struct crosvm *, struct kvm_pit_state2 *__pit_state); int crosvm_set_pit_state(struct crosvm *, const struct kvm_pit_state2 *__pit_state); +/* Gets the current timestamp of kvmclock as seen by the VM. */ +int crosvm_get_clock(struct crosvm *, struct kvm_clock_data *__clock_data); + +/* Sets the current timestamp of kvmclock for the VM. */ +int crosvm_set_clock(struct crosvm *, + const struct kvm_clock_data *__clock_data); + /* Sets the identity map address as in the KVM_SET_IDENTITY_MAP_ADDR ioctl. */ int crosvm_set_identity_map_addr(struct crosvm*, uint32_t __addr); diff --git a/crosvm_plugin/src/lib.rs b/crosvm_plugin/src/lib.rs index 8fd9623..ac6b358 100644 --- a/crosvm_plugin/src/lib.rs +++ b/crosvm_plugin/src/lib.rs @@ -45,8 +45,9 @@ use sys_util::ScmSocket; use kvm::dirty_log_bitmap_size; use kvm_sys::{ - kvm_cpuid_entry2, kvm_debugregs, kvm_fpu, kvm_ioapic_state, kvm_lapic_state, kvm_mp_state, - kvm_msr_entry, kvm_pic_state, kvm_pit_state2, kvm_regs, kvm_sregs, kvm_vcpu_events, kvm_xcrs, + kvm_clock_data, kvm_cpuid_entry2, kvm_debugregs, kvm_fpu, kvm_ioapic_state, kvm_lapic_state, + kvm_mp_state, kvm_msr_entry, kvm_pic_state, kvm_pit_state2, kvm_regs, kvm_sregs, + kvm_vcpu_events, kvm_xcrs, }; use plugin_proto::*; @@ -151,6 +152,8 @@ enum Stat { SetIoapicState, GetPitState, SetPitState, + GetClock, + SetClock, SetIdentityMapAddr, PauseVcpus, Start, @@ -1356,6 +1359,30 @@ pub unsafe extern "C" fn crosvm_set_pit_state( } #[no_mangle] +pub unsafe extern "C" fn crosvm_get_clock( + this: *mut crosvm, + clock_data: *mut kvm_clock_data, +) -> c_int { + let _u = STATS.record(Stat::GetClock); + let this = &mut *this; + let state = from_raw_parts_mut(clock_data as *mut u8, size_of::<kvm_clock_data>()); + let ret = this.get_state(MainRequest_StateSet::CLOCK, state); + to_crosvm_rc(ret) +} + +#[no_mangle] +pub unsafe extern "C" fn crosvm_set_clock( + this: *mut crosvm, + clock_data: *const kvm_clock_data, +) -> c_int { + let _u = STATS.record(Stat::SetClock); + let this = &mut *this; + let state = from_raw_parts(clock_data as *mut u8, size_of::<kvm_clock_data>()); + let ret = this.set_state(MainRequest_StateSet::CLOCK, state); + to_crosvm_rc(ret) +} + +#[no_mangle] pub unsafe extern "C" fn crosvm_set_identity_map_addr(self_: *mut crosvm, addr: u32) -> c_int { let _u = STATS.record(Stat::SetIdentityMapAddr); let self_ = &mut (*self_); |