aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/kvm.h
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-07-30 07:13:43 -0400
committerAvi Kivity <avi@qumranet.com>2007-10-13 04:18:21 -0400
commitb114b0804df7131cb6764b948c1c530c834fa3c0 (patch)
tree4e5ced9ed1cdb673d27b26b166cd0bd7c845d5b9 /drivers/kvm/kvm.h
parentc16f862d0257349607b7a9be7b4a4b7ed419a3ab (diff)
KVM: Use alignment properties of vcpu to simplify FPU ops
Now we use a kmem cache for allocating vcpus, we can get the 16-byte alignment required by fxsave & fxrstor instructions, and avoid manually aligning the buffer. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm/kvm.h')
-rw-r--r--drivers/kvm/kvm.h13
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h
index b362e8f8f832..7a34706f42be 100644
--- a/drivers/kvm/kvm.h
+++ b/drivers/kvm/kvm.h
@@ -45,10 +45,6 @@
45#define KVM_REFILL_PAGES 25 45#define KVM_REFILL_PAGES 25
46#define KVM_MAX_CPUID_ENTRIES 40 46#define KVM_MAX_CPUID_ENTRIES 40
47 47
48#define FX_IMAGE_SIZE 512
49#define FX_IMAGE_ALIGN 16
50#define FX_BUF_SIZE (2 * FX_IMAGE_SIZE + FX_IMAGE_ALIGN)
51
52#define DE_VECTOR 0 48#define DE_VECTOR 0
53#define NM_VECTOR 7 49#define NM_VECTOR 7
54#define DF_VECTOR 8 50#define DF_VECTOR 8
@@ -342,9 +338,8 @@ struct kvm_vcpu {
342 338
343 struct kvm_guest_debug guest_debug; 339 struct kvm_guest_debug guest_debug;
344 340
345 char fx_buf[FX_BUF_SIZE]; 341 struct i387_fxsave_struct host_fx_image;
346 char *host_fx_image; 342 struct i387_fxsave_struct guest_fx_image;
347 char *guest_fx_image;
348 int fpu_active; 343 int fpu_active;
349 int guest_fpu_loaded; 344 int guest_fpu_loaded;
350 345
@@ -704,12 +699,12 @@ static inline unsigned long read_msr(unsigned long msr)
704} 699}
705#endif 700#endif
706 701
707static inline void fx_save(void *image) 702static inline void fx_save(struct i387_fxsave_struct *image)
708{ 703{
709 asm ("fxsave (%0)":: "r" (image)); 704 asm ("fxsave (%0)":: "r" (image));
710} 705}
711 706
712static inline void fx_restore(void *image) 707static inline void fx_restore(struct i387_fxsave_struct *image)
713{ 708{
714 asm ("fxrstor (%0)":: "r" (image)); 709 asm ("fxrstor (%0)":: "r" (image));
715} 710}