]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - arch/x86/include/asm/kvm_host.h
kvm: x86: Dynamically allocate guest_fpu
[linux.git] / arch / x86 / include / asm / kvm_host.h
index 55e51ff7e421f80b9145036b9356aa1a63ff21ce..bca77c25a19a0ceb5d7d982ce1a6e8542d83c741 100644 (file)
@@ -497,7 +497,7 @@ struct kvm_mtrr {
 struct kvm_vcpu_hv_stimer {
        struct hrtimer timer;
        int index;
-       u64 config;
+       union hv_stimer_config config;
        u64 count;
        u64 exp_time;
        struct hv_message msg;
@@ -601,17 +601,16 @@ struct kvm_vcpu_arch {
 
        /*
         * QEMU userspace and the guest each have their own FPU state.
-        * In vcpu_run, we switch between the user and guest FPU contexts.
-        * While running a VCPU, the VCPU thread will have the guest FPU
-        * context.
+        * In vcpu_run, we switch between the user, maintained in the
+        * task_struct struct, and guest FPU contexts. While running a VCPU,
+        * the VCPU thread will have the guest FPU context.
         *
         * Note that while the PKRU state lives inside the fpu registers,
         * it is switched out separately at VMENTER and VMEXIT time. The
         * "guest_fpu" state here contains the guest FPU context, with the
         * host PRKU bits.
         */
-       struct fpu user_fpu;
-       struct fpu guest_fpu;
+       struct fpu *guest_fpu;
 
        u64 xcr0;
        u64 guest_supported_xcr0;
@@ -1094,7 +1093,8 @@ struct kvm_x86_ops {
        bool (*has_wbinvd_exit)(void);
 
        u64 (*read_l1_tsc_offset)(struct kvm_vcpu *vcpu);
-       void (*write_tsc_offset)(struct kvm_vcpu *vcpu, u64 offset);
+       /* Returns actual tsc_offset set in active VMCS */
+       u64 (*write_l1_tsc_offset)(struct kvm_vcpu *vcpu, u64 offset);
 
        void (*get_exit_info)(struct kvm_vcpu *vcpu, u64 *info1, u64 *info2);
 
@@ -1185,6 +1185,7 @@ struct kvm_x86_ops {
 
        int (*nested_enable_evmcs)(struct kvm_vcpu *vcpu,
                                   uint16_t *vmcs_version);
+       uint16_t (*nested_get_evmcs_version)(struct kvm_vcpu *vcpu);
 };
 
 struct kvm_arch_async_pf {
@@ -1195,6 +1196,7 @@ struct kvm_arch_async_pf {
 };
 
 extern struct kvm_x86_ops *kvm_x86_ops;
+extern struct kmem_cache *x86_fpu_cache;
 
 #define __KVM_HAVE_ARCH_VM_ALLOC
 static inline struct kvm *kvm_arch_alloc_vm(void)