aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/kvm_main.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-15 19:14:34 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-15 19:14:34 -0400
commit3ea88d6738ebda95e05ada0c7b72f224d0a36953 (patch)
treeb087d4d9d978556d6f673d8ce93489ef2b0da9ad /drivers/kvm/kvm_main.c
parent4ff4275b24fdcca189b33f9a73fe7abef1dc84bc (diff)
parent7702fd1f6fea57921f2e643d27a23a2d0394499c (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm: KVM: Prevent guest fpu state from leaking into the host
Diffstat (limited to 'drivers/kvm/kvm_main.c')
-rw-r--r--drivers/kvm/kvm_main.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index da985b31b17e..8f1f07adb04e 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -253,6 +253,28 @@ int kvm_write_guest(struct kvm_vcpu *vcpu, gva_t addr, unsigned long size,
253} 253}
254EXPORT_SYMBOL_GPL(kvm_write_guest); 254EXPORT_SYMBOL_GPL(kvm_write_guest);
255 255
256void kvm_load_guest_fpu(struct kvm_vcpu *vcpu)
257{
258 if (!vcpu->fpu_active || vcpu->guest_fpu_loaded)
259 return;
260
261 vcpu->guest_fpu_loaded = 1;
262 fx_save(vcpu->host_fx_image);
263 fx_restore(vcpu->guest_fx_image);
264}
265EXPORT_SYMBOL_GPL(kvm_load_guest_fpu);
266
267void kvm_put_guest_fpu(struct kvm_vcpu *vcpu)
268{
269 if (!vcpu->guest_fpu_loaded)
270 return;
271
272 vcpu->guest_fpu_loaded = 0;
273 fx_save(vcpu->guest_fx_image);
274 fx_restore(vcpu->host_fx_image);
275}
276EXPORT_SYMBOL_GPL(kvm_put_guest_fpu);
277
256/* 278/*
257 * Switches to specified vcpu, until a matching vcpu_put() 279 * Switches to specified vcpu, until a matching vcpu_put()
258 */ 280 */