diff options
Diffstat (limited to 'crosvm_plugin')
-rw-r--r-- | crosvm_plugin/Cargo.toml | 2 | ||||
-rw-r--r-- | crosvm_plugin/crosvm.h | 5 | ||||
-rw-r--r-- | crosvm_plugin/src/lib.rs | 29 |
3 files changed, 33 insertions, 3 deletions
diff --git a/crosvm_plugin/Cargo.toml b/crosvm_plugin/Cargo.toml index 5b775e3..3c61aa4 100644 --- a/crosvm_plugin/Cargo.toml +++ b/crosvm_plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "crosvm_plugin" -version = "0.13.0" +version = "0.14.0" authors = ["The Chromium OS Authors"] [lib] diff --git a/crosvm_plugin/crosvm.h b/crosvm_plugin/crosvm.h index c7589e2..42c979a 100644 --- a/crosvm_plugin/crosvm.h +++ b/crosvm_plugin/crosvm.h @@ -495,6 +495,11 @@ int crosvm_vcpu_get_debugregs(struct crosvm_vcpu*, struct kvm_debugregs*); /* Sets the state of the vcpu's debug registers */ int crosvm_vcpu_set_debugregs(struct crosvm_vcpu*, const struct kvm_debugregs*); +/* Gets the state of the vcpu's xcr registers. */ +int crosvm_vcpu_get_xcrs(struct crosvm_vcpu*, struct kvm_xcrs*); +/* Sets the state of the vcpu's xcr registers. */ +int crosvm_vcpu_set_xcrs(struct crosvm_vcpu*, const struct kvm_xcrs*); + /* Gets the MSRs of the vcpu indicated by the index field of each entry. */ int crosvm_vcpu_get_msrs(struct crosvm_vcpu*, uint32_t __msr_count, struct kvm_msr_entry *__msr_entries); diff --git a/crosvm_plugin/src/lib.rs b/crosvm_plugin/src/lib.rs index 6bd1be8..231ee25 100644 --- a/crosvm_plugin/src/lib.rs +++ b/crosvm_plugin/src/lib.rs @@ -44,8 +44,9 @@ use sys_util::Scm; use kvm::dirty_log_bitmap_size; -use kvm_sys::{kvm_regs, kvm_sregs, kvm_fpu, kvm_debugregs, kvm_msr_entry, kvm_cpuid_entry2, - kvm_lapic_state, kvm_mp_state, kvm_pic_state, kvm_ioapic_state, kvm_pit_state2}; +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}; use plugin_proto::*; @@ -162,6 +163,8 @@ enum Stat { SetFpu, GetDebugRegs, SetDebugRegs, + GetXCRegs, + SetXCRegs, VcpuGetMsrs, VcpuSetMsrs, VcpuSetCpuid, @@ -1383,6 +1386,28 @@ pub unsafe extern "C" fn crosvm_vcpu_set_debugregs(this: *mut crosvm_vcpu, } #[no_mangle] +pub unsafe extern "C" fn crosvm_vcpu_get_xcrs(this: *mut crosvm_vcpu, + xcrs: *mut kvm_xcrs) + -> c_int { + let _u = STATS.record(Stat::GetXCRegs); + let this = &mut *this; + let xcrs = from_raw_parts_mut(xcrs as *mut u8, size_of::<kvm_xcrs>()); + let ret = this.get_state(VcpuRequest_StateSet::XCREGS, xcrs); + to_crosvm_rc(ret) +} + +#[no_mangle] +pub unsafe extern "C" fn crosvm_vcpu_set_xcrs(this: *mut crosvm_vcpu, + xcrs: *const kvm_xcrs) + -> c_int { + let _u = STATS.record(Stat::SetXCRegs); + let this = &mut *this; + let xcrs = from_raw_parts(xcrs as *mut u8, size_of::<kvm_xcrs>()); + let ret = this.set_state(VcpuRequest_StateSet::XCREGS, xcrs); + to_crosvm_rc(ret) +} + +#[no_mangle] pub unsafe extern "C" fn crosvm_vcpu_get_msrs(this: *mut crosvm_vcpu, msr_count: u32, msr_entries: *mut kvm_msr_entry) |