KVM: PPC: Preload FPU when possible
authorAlexander Graf <agraf@suse.de>
Fri, 19 Feb 2010 10:00:35 +0000 (11:00 +0100)
committerAvi Kivity <avi@redhat.com>
Sun, 25 Apr 2010 09:34:59 +0000 (12:34 +0300)
There are some situations when we're pretty sure the guest will use the
FPU soon. So we can save the churn of going into the guest, finding out
it does want to use the FPU and going out again.

This patch adds preloading of the FPU when it's reasonable.

Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/powerpc/kvm/book3s.c

index b18415fc01880ee80a876f382c06ef40c2d57424..55c38e5982801058812ef76312aef9d2d1e49427 100644 (file)
@@ -138,6 +138,10 @@ void kvmppc_set_msr(struct kvm_vcpu *vcpu, u64 msr)
                kvmppc_mmu_flush_segments(vcpu);
                kvmppc_mmu_map_segment(vcpu, vcpu->arch.pc);
        }
+
+       /* Preload FPU if it's enabled */
+       if (vcpu->arch.msr & MSR_FP)
+               kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP);
 }
 
 void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags)
@@ -1196,6 +1200,10 @@ int __kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
        /* XXX we get called with irq disabled - change that! */
        local_irq_enable();
 
+       /* Preload FPU if it's enabled */
+       if (vcpu->arch.msr & MSR_FP)
+               kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP);
+
        ret = __kvmppc_vcpu_entry(kvm_run, vcpu);
 
        local_irq_disable();