* SLES 10 hangs
@ 2007-05-01 10:19 Thomas Glanzmann
[not found] ` <20070501101923.GC17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>
0 siblings, 1 reply; 9+ messages in thread
From: Thomas Glanzmann @ 2007-05-01 10:19 UTC (permalink / raw)
To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Hello,
as soon as SLES 10 switches the first time to X the screen is frozen and
I can't press any keys or move the virtual mouse. But I can switch to
the qemu console using ctrl-alt-2 and back.
Thomas
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
^ permalink raw reply [flat|nested] 9+ messages in thread[parent not found: <20070501101923.GC17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <20070501101923.GC17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org> @ 2007-05-01 10:28 ` Avi Kivity [not found] ` <46371640.7080303-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Avi Kivity @ 2007-05-01 10:28 UTC (permalink / raw) To: Thomas Glanzmann; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Thomas Glanzmann wrote: > Hello, > as soon as SLES 10 switches the first time to X the screen is frozen and > I can't press any keys or move the virtual mouse. But I can switch to > the qemu console using ctrl-alt-2 and back. > > Is this a regression from a previous kvm version? Does this happen with -no-kvm? Anything in dmesg? Please post the guest's /var/log/Xorg.0.log. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <46371640.7080303-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <46371640.7080303-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2007-05-01 10:33 ` Thomas Glanzmann [not found] ` <20070501103332.GD17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Thomas Glanzmann @ 2007-05-01 10:33 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hello Avi, > Is this a regression from a previous kvm version? it worked a few weeks ago. > Does this happen with -no-kvm? Never tried. > Anything in dmesg? Nope > Please post the guest's /var/log/Xorg.0.log. It's the SLES 10 installer. So there is no way I can access it. I forgot to mention that earlier. And I also have a strange effect when starting kvm. When I browse using opera my host X display gets corrupted and my mouse pins to the left of the screen. I can move it up and down but not away from the left border. Maybe some sort of memory corruption. The system runs. And I am pretty sure that it is related to kvm. Thomas ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20070501103332.GD17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <20070501103332.GD17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org> @ 2007-05-01 10:57 ` Avi Kivity [not found] ` <46371D14.4040000-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Avi Kivity @ 2007-05-01 10:57 UTC (permalink / raw) To: Thomas Glanzmann; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Thomas Glanzmann wrote: > Hello Avi, > > >> Is this a regression from a previous kvm version? >> > > it worked a few weeks ago. > > Which version introduced the regression? > > >> Please post the guest's /var/log/Xorg.0.log. >> > > It's the SLES 10 installer. So there is no way I can access it. I forgot > to mention that earlier. And I also have a strange effect when starting > kvm. When I browse using opera my host X display gets corrupted and my > mouse pins to the left of the screen. I can move it up and down but not > away from the left border. Maybe some sort of memory corruption. The > system runs. And I am pretty sure that it is related to kvm. > Can you make sure? Also please provide links to the guest OS installer and to the Opera installer you use so I can try reproduce. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <46371D14.4040000-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <46371D14.4040000-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2007-05-01 11:21 ` Pelle [not found] ` <463722C9.8060208-5JapdU7xTciEVqv0pETR8A@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Pelle @ 2007-05-01 11:21 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Avi Kivity wrote: > Thomas Glanzmann wrote: > >> Hello Avi, >> >> >> >>> Is this a regression from a previous kvm version? >>> >>> >> it worked a few weeks ago. >> >> >> > > Which version introduced the regression? > > >> >> >>> Please post the guest's /var/log/Xorg.0.log. >>> >>> >> It's the SLES 10 installer. So there is no way I can access it. I forgot >> to mention that earlier. And I also have a strange effect when starting >> kvm. When I browse using opera my host X display gets corrupted and my >> mouse pins to the left of the screen. I can move it up and down but not >> away from the left border. Maybe some sort of memory corruption. The >> system runs. And I am pretty sure that it is related to kvm. >> >> > > Can you make sure? Also please provide links to the guest OS installer > and to the Opera installer you use so I can try reproduce. > > > Hey, I recognize that problem, although my display isn't corrupted, just the mouse. It was resistant to X restarts. It first surfaced with kvm-21 and debian edgy on my machine. I don't believe there was an opera update recently. ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <463722C9.8060208-5JapdU7xTciEVqv0pETR8A@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <463722C9.8060208-5JapdU7xTciEVqv0pETR8A@public.gmane.org> @ 2007-05-01 14:29 ` Thomas Glanzmann [not found] ` <20070501142946.GF17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Thomas Glanzmann @ 2007-05-01 14:29 UTC (permalink / raw) To: Pelle; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hello Pelle, > Hey, I recognize that problem, although my display isn't corrupted, just > the mouse. It was resistant to X restarts. It first surfaced with kvm-21 > and debian edgy on my machine. I don't believe there was an opera update > recently. for me the same thing. Debian ETCH. And the display is only corrupted for a short time, as soon as I switch applications or do a X redraw everything is fine again expect for the mouse. And it popped always up when I was using opera. But that just could be coincedence. I don't believe in coincedence. Thomas ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <20070501142946.GF17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <20070501142946.GF17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org> @ 2007-05-02 6:50 ` Avi Kivity [not found] ` <463834D2.6070101-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 9+ messages in thread From: Avi Kivity @ 2007-05-02 6:50 UTC (permalink / raw) To: Thomas Glanzmann; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Pelle Thomas Glanzmann wrote: > Hello Pelle, > > >> Hey, I recognize that problem, although my display isn't corrupted, just >> the mouse. It was resistant to X restarts. It first surfaced with kvm-21 >> and debian edgy on my machine. I don't believe there was an opera update >> recently. >> > > for me the same thing. Debian ETCH. And the display is only corrupted > for a short time, as soon as I switch applications or do a X redraw > everything is fine again expect for the mouse. And it popped always up > when I was using opera. But that just could be coincedence. I don't > believe in coincedence. > I've just reproduced this, it's fe7dc1f2c0c3d0c21abf9dfa4387f0b748080688 (vmx lazy fpu). I'm looking into it. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <463834D2.6070101-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: SLES 10 hangs [not found] ` <463834D2.6070101-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2007-05-02 7:05 ` Thomas Glanzmann 2007-05-02 10:21 ` Avi Kivity 1 sibling, 0 replies; 9+ messages in thread From: Thomas Glanzmann @ 2007-05-02 7:05 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Pelle Hello Avi, > I've just reproduced this, it's fe7dc1f2c0c3d0c21abf9dfa4387f0b748080688 > (vmx lazy fpu). thanks. Thomas ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: SLES 10 hangs [not found] ` <463834D2.6070101-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 2007-05-02 7:05 ` Thomas Glanzmann @ 2007-05-02 10:21 ` Avi Kivity 1 sibling, 0 replies; 9+ messages in thread From: Avi Kivity @ 2007-05-02 10:21 UTC (permalink / raw) To: Thomas Glanzmann; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Pelle [-- Attachment #1: Type: text/plain, Size: 1090 bytes --] Avi Kivity wrote: > Thomas Glanzmann wrote: > >> Hello Pelle, >> >> >> >>> Hey, I recognize that problem, although my display isn't corrupted, just >>> the mouse. It was resistant to X restarts. It first surfaced with kvm-21 >>> and debian edgy on my machine. I don't believe there was an opera update >>> recently. >>> >>> >> for me the same thing. Debian ETCH. And the display is only corrupted >> for a short time, as soon as I switch applications or do a X redraw >> everything is fine again expect for the mouse. And it popped always up >> when I was using opera. But that just could be coincedence. I don't >> believe in coincedence. >> >> > > I've just reproduced this, it's fe7dc1f2c0c3d0c21abf9dfa4387f0b748080688 > (vmx lazy fpu). > > I'm looking into it. > > > The attached patch (against HEAD) fixes this issue. It's still not committed as I have to rework it into smaller patches (and to backport it to the 2.6.22 patchqueue... sigh). Please test. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. [-- Attachment #2: fpu-fix.patch --] [-- Type: text/x-patch, Size: 8811 bytes --] diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h index 9c20d5d..4d7f7c4 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h @@ -39,9 +39,9 @@ #define KVM_GUEST_CR0_MASK \ (CR0_PG_MASK | CR0_PE_MASK | CR0_WP_MASK | CR0_NE_MASK \ - | CR0_NW_MASK | CR0_CD_MASK) + | CR0_NW_MASK | CR0_CD_MASK | CR0_TS_MASK) #define KVM_VM_CR0_ALWAYS_ON \ - (CR0_PG_MASK | CR0_PE_MASK | CR0_WP_MASK | CR0_NE_MASK) + (CR0_PG_MASK | CR0_PE_MASK | CR0_WP_MASK | CR0_NE_MASK | CR0_TS_MASK) #define KVM_GUEST_CR4_MASK \ (CR4_PSE_MASK | CR4_PAE_MASK | CR4_PGE_MASK | CR4_VMXE_MASK | CR4_VME_MASK) #define KVM_PMODE_VM_CR4_ALWAYS_ON (CR4_VMXE_MASK | CR4_PAE_MASK) @@ -60,7 +60,7 @@ #define FX_IMAGE_SIZE 512 #define FX_IMAGE_ALIGN 16 -#define FX_BUF_SIZE (2 * FX_IMAGE_SIZE + FX_IMAGE_ALIGN) +#define FX_BUF_SIZE (FX_IMAGE_SIZE + FX_IMAGE_ALIGN) #define DE_VECTOR 0 #define NM_VECTOR 7 @@ -301,7 +301,6 @@ struct kvm_vcpu { struct kvm_guest_debug guest_debug; char fx_buf[FX_BUF_SIZE]; - char *host_fx_image; char *guest_fx_image; int fpu_active; diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c index a3723dd..7c5dede 100644 --- a/drivers/kvm/kvm_main.c +++ b/drivers/kvm/kvm_main.c @@ -40,6 +40,7 @@ #include <linux/file.h> #include <linux/fs.h> #include <linux/mount.h> +#include <asm/i387.h> #include "x86_emulate.h" #include "segment_descriptor.h" @@ -615,10 +616,10 @@ void fx_init(struct kvm_vcpu *vcpu) } *fx_image; - fx_save(vcpu->host_fx_image); + kernel_fpu_begin(); fpu_init(); fx_save(vcpu->guest_fx_image); - fx_restore(vcpu->host_fx_image); + kernel_fpu_end(); fx_image = (struct fx_image_s *)vcpu->guest_fx_image; fx_image->mxcsr = 0x1f80; @@ -2315,9 +2316,8 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, int n) goto out_free_run; vcpu->pio_data = page_address(page); - vcpu->host_fx_image = (char*)ALIGN((hva_t)vcpu->fx_buf, + vcpu->guest_fx_image = (char*)ALIGN((hva_t)vcpu->fx_buf, FX_IMAGE_ALIGN); - vcpu->guest_fx_image = vcpu->host_fx_image + FX_IMAGE_SIZE; vcpu->cr0 = 0x10; r = kvm_arch_ops->vcpu_create(vcpu); diff --git a/drivers/kvm/svm.c b/drivers/kvm/svm.c index b621403..99ab4ce 100644 --- a/drivers/kvm/svm.c +++ b/drivers/kvm/svm.c @@ -20,6 +20,7 @@ #include <linux/highmem.h> #include <linux/profile.h> #include <asm/desc.h> +#include <asm/i387.h> #include "kvm_svm.h" #include "x86_emulate.h" @@ -1505,7 +1506,7 @@ again: } if (vcpu->fpu_active) { - fx_save(vcpu->host_fx_image); + kernel_fpu_begin(); fx_restore(vcpu->guest_fx_image); } @@ -1620,7 +1621,7 @@ again: if (vcpu->fpu_active) { fx_save(vcpu->guest_fx_image); - fx_restore(vcpu->host_fx_image); + kernel_fpu_end(); } if ((vcpu->svm->vmcb->save.dr7 & 0xff)) diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c index 19edb34..95c5262 100644 --- a/drivers/kvm/vmx.c +++ b/drivers/kvm/vmx.c @@ -24,6 +24,7 @@ #include <linux/profile.h> #include <asm/io.h> #include <asm/desc.h> +#include <asm/i387.h> #include "segment_descriptor.h" @@ -332,6 +333,40 @@ static void vmx_inject_gp(struct kvm_vcpu *vcpu, unsigned error_code) INTR_INFO_VALID_MASK); } +static void update_exception_bitmap(struct kvm_vcpu *vcpu) +{ + u32 eb = 0; + + if (vcpu->rmode.active) + eb |= ~0u; + else + eb |= (1u << PF_VECTOR) | (1 << NM_VECTOR); + if (vcpu->fpu_active) + eb &= ~(1u << NM_VECTOR); + vmcs_write32(EXCEPTION_BITMAP, eb); +} + +static void vmx_activate_fpu(struct kvm_vcpu *vcpu) +{ + if (vcpu->fpu_active) + return; + vcpu->fpu_active = 1; + vmcs_clear_bits(GUEST_CR0, CR0_TS_MASK); + if (vcpu->cr0 & CR0_TS_MASK) + vmcs_set_bits(GUEST_CR0, CR0_TS_MASK); + update_exception_bitmap(vcpu); +} + +static void vmx_deactivate_fpu(struct kvm_vcpu *vcpu) +{ + if (!vcpu->fpu_active || !(vcpu->cr0 & CR0_PE_MASK)) + return; + vcpu->fpu_active = 0; + vmcs_set_bits(GUEST_CR0, CR0_TS_MASK); + vmcs_set_bits(EXCEPTION_BITMAP, 1 << NM_VECTOR); + update_exception_bitmap(vcpu); +} + /* * Set up the vmcs to automatically save and restore system * msrs. Don't touch the 64-bit msrs if the guest is in legacy @@ -538,10 +573,8 @@ static void vcpu_put_rsp_rip(struct kvm_vcpu *vcpu) static int set_guest_debug(struct kvm_vcpu *vcpu, struct kvm_debug_guest *dbg) { unsigned long dr7 = 0x400; - u32 exception_bitmap; int old_singlestep; - exception_bitmap = vmcs_read32(EXCEPTION_BITMAP); old_singlestep = vcpu->guest_debug.singlestep; vcpu->guest_debug.enabled = dbg->enabled; @@ -557,11 +590,13 @@ static int set_guest_debug(struct kvm_vcpu *vcpu, struct kvm_debug_guest *dbg) dr7 |= 0 << (i*4+16); /* execution breakpoint */ } - exception_bitmap |= (1u << 1); /* Trap debug exceptions */ + /* Trap debug exceptions */ + vmcs_set_bits(EXCEPTION_BITMAP, 1u << 1); vcpu->guest_debug.singlestep = dbg->singlestep; } else { - exception_bitmap &= ~(1u << 1); /* Ignore debug exceptions */ + /* Ignore debug exceptions */ + vmcs_clear_bits(EXCEPTION_BITMAP, 1u << 1); vcpu->guest_debug.singlestep = 0; } @@ -573,7 +608,6 @@ static int set_guest_debug(struct kvm_vcpu *vcpu, struct kvm_debug_guest *dbg) vmcs_writel(GUEST_RFLAGS, flags); } - vmcs_write32(EXCEPTION_BITMAP, exception_bitmap); vmcs_writel(GUEST_DR7, dr7); return 0; @@ -687,14 +721,6 @@ static __exit void hardware_unsetup(void) free_kvm_area(); } -static void update_exception_bitmap(struct kvm_vcpu *vcpu) -{ - if (vcpu->rmode.active) - vmcs_write32(EXCEPTION_BITMAP, ~0); - else - vmcs_write32(EXCEPTION_BITMAP, 1 << PF_VECTOR); -} - static void fix_pmode_dataseg(int seg, struct kvm_save_segment *save) { struct kvm_vmx_segment_field *sf = &kvm_vmx_segment_fields[seg]; @@ -860,26 +886,21 @@ static void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) } #endif - if (!(cr0 & CR0_TS_MASK)) { - vcpu->fpu_active = 1; - vmcs_clear_bits(EXCEPTION_BITMAP, CR0_TS_MASK); - } + vmx_deactivate_fpu(vcpu); vmcs_writel(CR0_READ_SHADOW, cr0); vmcs_writel(GUEST_CR0, (cr0 & ~KVM_GUEST_CR0_MASK) | KVM_VM_CR0_ALWAYS_ON); vcpu->cr0 = cr0; + + if (!(cr0 & CR0_TS_MASK)) + vmx_activate_fpu(vcpu); } static void vmx_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3) { vmcs_writel(GUEST_CR3, cr3); - - if (!(vcpu->cr0 & CR0_TS_MASK)) { - vcpu->fpu_active = 0; - vmcs_set_bits(GUEST_CR0, CR0_TS_MASK); - vmcs_set_bits(EXCEPTION_BITMAP, 1 << NM_VECTOR); - } + vmx_deactivate_fpu(vcpu); } static void vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) @@ -1249,6 +1270,7 @@ static int vmx_vcpu_setup(struct kvm_vcpu *vcpu) #ifdef CONFIG_X86_64 vmx_set_efer(vcpu, 0); #endif + vmx_activate_fpu(vcpu); return 0; @@ -1408,10 +1430,7 @@ static int handle_exception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) } if (is_no_device(intr_info)) { - vcpu->fpu_active = 1; - vmcs_clear_bits(EXCEPTION_BITMAP, 1 << NM_VECTOR); - if (!(vcpu->cr0 & CR0_TS_MASK)) - vmcs_clear_bits(GUEST_CR0, CR0_TS_MASK); + vmx_activate_fpu(vcpu); return 1; } @@ -1603,12 +1622,10 @@ static int handle_cr(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) break; case 2: /* clts */ vcpu_load_rsp_rip(vcpu); - vcpu->fpu_active = 1; - vmcs_clear_bits(EXCEPTION_BITMAP, 1 << NM_VECTOR); - vmcs_clear_bits(GUEST_CR0, CR0_TS_MASK); vcpu->cr0 &= ~CR0_TS_MASK; vmcs_writel(CR0_READ_SHADOW, vcpu->cr0); skip_emulated_instruction(vcpu); + vmx_activate_fpu(vcpu); return 1; case 1: /*mov from cr*/ switch (cr) { @@ -1824,8 +1841,10 @@ static int vmx_vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) u16 fs_sel, gs_sel, ldt_sel; int fs_gs_ldt_reload_needed; int r; + int guest_fpu_loaded; preempted: + guest_fpu_loaded = 0; /* * Set host fs and gs selectors. Unfortunately, 22.2.3 does not * allow segment selectors with cpl > 0 or ti == 1. @@ -1861,11 +1880,6 @@ preempted: if (vcpu->guest_debug.enabled) kvm_guest_debug_pre(vcpu); - if (vcpu->fpu_active) { - fx_save(vcpu->host_fx_image); - fx_restore(vcpu->guest_fx_image); - } - #ifdef CONFIG_X86_64 if (is_long_mode(vcpu)) { save_msrs(vcpu->host_msrs + msr_offset_kernel_gs_base, 1); @@ -1874,6 +1888,12 @@ preempted: #endif again: + if (vcpu->fpu_active && !guest_fpu_loaded) { + kernel_fpu_begin(); + fx_restore(vcpu->guest_fx_image); + guest_fpu_loaded = 1; + } + asm ( /* Store host registers */ "pushf \n\t" @@ -2059,9 +2079,10 @@ out: } #endif - if (vcpu->fpu_active) { + if (guest_fpu_loaded) { fx_save(vcpu->guest_fx_image); - fx_restore(vcpu->host_fx_image); + kernel_fpu_end(); + guest_fpu_loaded = 0; } if (r > 0) { @@ -2141,7 +2162,6 @@ static int vmx_create_vcpu(struct kvm_vcpu *vcpu) vmcs_clear(vmcs); vcpu->vmcs = vmcs; vcpu->launched = 0; - vcpu->fpu_active = 1; return 0; [-- Attachment #3: Type: text/plain, Size: 286 bytes --] ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ [-- Attachment #4: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-05-02 10:21 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-01 10:19 SLES 10 hangs Thomas Glanzmann
[not found] ` <20070501101923.GC17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>
2007-05-01 10:28 ` Avi Kivity
[not found] ` <46371640.7080303-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-01 10:33 ` Thomas Glanzmann
[not found] ` <20070501103332.GD17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>
2007-05-01 10:57 ` Avi Kivity
[not found] ` <46371D14.4040000-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-01 11:21 ` Pelle
[not found] ` <463722C9.8060208-5JapdU7xTciEVqv0pETR8A@public.gmane.org>
2007-05-01 14:29 ` Thomas Glanzmann
[not found] ` <20070501142946.GF17813-vCsBGSbFJi4XOLVLeuLo0p3xXOyapcuTYd9OGiuxSwg@public.gmane.org>
2007-05-02 6:50 ` Avi Kivity
[not found] ` <463834D2.6070101-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-02 7:05 ` Thomas Glanzmann
2007-05-02 10:21 ` Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox