]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/powerpc/kvm/book3s_pr.c
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[karo-tx-linux.git] / arch / powerpc / kvm / book3s_pr.c
index 70fb08da416dd60a7c52a10521b766c3733888fe..95bceca8f40e870fe933e3f6744b250326fca7a5 100644 (file)
@@ -751,6 +751,7 @@ static int kvmppc_handle_ext(struct kvm_vcpu *vcpu, unsigned int exit_nr,
                preempt_disable();
                enable_kernel_fp();
                load_fp_state(&vcpu->arch.fp);
+               disable_kernel_fp();
                t->fp_save_area = &vcpu->arch.fp;
                preempt_enable();
        }
@@ -760,6 +761,7 @@ static int kvmppc_handle_ext(struct kvm_vcpu *vcpu, unsigned int exit_nr,
                preempt_disable();
                enable_kernel_altivec();
                load_vr_state(&vcpu->arch.vr);
+               disable_kernel_altivec();
                t->vr_save_area = &vcpu->arch.vr;
                preempt_enable();
 #endif
@@ -788,6 +790,7 @@ static void kvmppc_handle_lost_ext(struct kvm_vcpu *vcpu)
                preempt_disable();
                enable_kernel_fp();
                load_fp_state(&vcpu->arch.fp);
+               disable_kernel_fp();
                preempt_enable();
        }
 #ifdef CONFIG_ALTIVEC
@@ -795,6 +798,7 @@ static void kvmppc_handle_lost_ext(struct kvm_vcpu *vcpu)
                preempt_disable();
                enable_kernel_altivec();
                load_vr_state(&vcpu->arch.vr);
+               disable_kernel_altivec();
                preempt_enable();
        }
 #endif
@@ -1486,21 +1490,8 @@ static int kvmppc_vcpu_run_pr(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
                goto out;
        /* interrupts now hard-disabled */
 
-       /* Save FPU state in thread_struct */
-       if (current->thread.regs->msr & MSR_FP)
-               giveup_fpu(current);
-
-#ifdef CONFIG_ALTIVEC
-       /* Save Altivec state in thread_struct */
-       if (current->thread.regs->msr & MSR_VEC)
-               giveup_altivec(current);
-#endif
-
-#ifdef CONFIG_VSX
-       /* Save VSX state in thread_struct */
-       if (current->thread.regs->msr & MSR_VSX)
-               __giveup_vsx(current);
-#endif
+       /* Save FPU, Altivec and VSX state */
+       giveup_all(current);
 
        /* Preload FPU if it's enabled */
        if (kvmppc_get_msr(vcpu) & MSR_FP)