Commit-ID:  04ac88abaf758bd76edcc3be5549003a017e7963
Gitweb:     http://git.kernel.org/tip/04ac88abaf758bd76edcc3be5549003a017e7963
Author:     Andy Lutomirski <[email protected]>
AuthorDate: Mon, 31 Oct 2016 15:18:45 -0700
Committer:  Ingo Molnar <[email protected]>
CommitDate: Tue, 1 Nov 2016 07:47:54 +0100

x86/fpu, kvm: Remove host CR0.TS manipulation

Now that x86 always uses eager FPU switching on the host, there's no
need for KVM to manipulate the host's CR0.TS.

This should be both simpler and faster.

Signed-off-by: Andy Lutomirski <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Brian Gerst <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Denys Vlasenko <[email protected]>
Cc: Fenghua Yu <[email protected]>
Cc: H. Peter Anvin <[email protected]>
Cc: Josh Poimboeuf <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Quentin Casasnovas <[email protected]>
Cc: Rik van Riel <[email protected]>
Cc: Rusty Russell <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: kvm list <[email protected]>
Link: 
http://lkml.kernel.org/r/b212064922537c05d0c81d931fc4dbe769127ce7.1477951965.git.l...@kernel.org
Signed-off-by: Ingo Molnar <[email protected]>
---
 arch/x86/kvm/vmx.c | 12 ++++--------
 arch/x86/kvm/x86.c |  5 -----
 2 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index cf1b16d..531c446 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -2144,12 +2144,6 @@ static void __vmx_load_host_state(struct vcpu_vmx *vmx)
 #endif
        if (vmx->host_state.msr_host_bndcfgs)
                wrmsrl(MSR_IA32_BNDCFGS, vmx->host_state.msr_host_bndcfgs);
-       /*
-        * If the FPU is not active (through the host task or
-        * the guest vcpu), then restore the cr0.TS bit.
-        */
-       if (!fpregs_active() && !vmx->vcpu.guest_fpu_loaded)
-               stts();
        load_gdt(this_cpu_ptr(&host_gdt));
 }
 
@@ -4871,9 +4865,11 @@ static void vmx_set_constant_host_state(struct vcpu_vmx 
*vmx)
        u32 low32, high32;
        unsigned long tmpl;
        struct desc_ptr dt;
-       unsigned long cr4;
+       unsigned long cr0, cr4;
 
-       vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS);  /* 22.2.3 */
+       cr0 = read_cr0();
+       WARN_ON(cr0 & X86_CR0_TS);
+       vmcs_writel(HOST_CR0, cr0);  /* 22.2.3 */
        vmcs_writel(HOST_CR3, read_cr3());  /* 22.2.3  FIXME: shadow tables */
 
        /* Save the most likely value for this task's CR4 in the VMCS. */
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 7f9fa2d..cfe6a75b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -5060,11 +5060,6 @@ static void emulator_get_fpu(struct x86_emulate_ctxt 
*ctxt)
 {
        preempt_disable();
        kvm_load_guest_fpu(emul_to_vcpu(ctxt));
-       /*
-        * CR0.TS may reference the host fpu state, not the guest fpu state,
-        * so it may be clear at this point.
-        */
-       clts();
 }
 
 static void emulator_put_fpu(struct x86_emulate_ctxt *ctxt)

Reply via email to