summary refs log tree commit diff
path: root/kvm
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2018-01-02 13:43:40 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-01-03 14:23:23 -0800
commitd60bb1616c18c8fa0250204f460c4c632275cf48 (patch)
treebf84576ee6fe4fa5bb2fb98b984ee850e6ddea7c /kvm
parentce4611cde2d51c49356a9599b3c647e2ce3ee488 (diff)
downloadcrosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.tar
crosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.tar.gz
crosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.tar.bz2
crosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.tar.lz
crosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.tar.xz
crosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.tar.zst
crosvm-d60bb1616c18c8fa0250204f460c4c632275cf48.zip
kvm: add KVM_GET_FPU ioctl
BUG=None
TEST=./build_test

Change-Id: I38ee166d9c7a0340d58fb3fd7f51895ca158f8b3
Reviewed-on: https://chromium-review.googlesource.com/848016
Commit-Ready: Zach Reizner <zachr@chromium.org>
Tested-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Stephen Barber <smbarber@chromium.org>
Diffstat (limited to 'kvm')
-rw-r--r--kvm/src/lib.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/kvm/src/lib.rs b/kvm/src/lib.rs
index 18699d7..bd7fdf5 100644
--- a/kvm/src/lib.rs
+++ b/kvm/src/lib.rs
@@ -581,6 +581,19 @@ impl Vcpu {
         Ok(())
     }
 
+    /// Gets the VCPU FPU registers.
+    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+    pub fn get_fpu(&self) -> Result<kvm_fpu> {
+        // Safe because we know that our file is a VCPU fd, we know the kernel will only write the
+        // correct amount of memory to our pointer, and we verify the return result.
+        let mut regs = unsafe { std::mem::zeroed() };
+        let ret = unsafe { ioctl_with_mut_ref(self, KVM_GET_FPU(), &mut regs) };
+        if ret != 0 {
+            return errno_result();
+        }
+        Ok(regs)
+    }
+
     /// X86 specific call to setup the FPU
     ///
     /// See the documentation for KVM_SET_FPU.