summary refs log tree commit diff
path: root/crosvm_plugin
diff options
context:
space:
mode:
Diffstat (limited to 'crosvm_plugin')
-rw-r--r--crosvm_plugin/Cargo.toml2
-rw-r--r--crosvm_plugin/crosvm.h5
-rw-r--r--crosvm_plugin/src/lib.rs29
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)