public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
@ 2007-07-14 17:06 Aurelien Jarno
       [not found] ` <20070714170618.GB6527-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-14 17:06 UTC (permalink / raw)
  To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Hi,

I have just updated my system from kvm 28 to kvm 29, and a GNU/kFreeBSD
amd64 system fails to boot with the following error:

  Fatal trap 12 with interrupts disabled


  Fatal trap 12: page fault while in kernel mode
  fault virtual address   = 0x7aa93e0
  fault code              = supervisor read, page not present
  instruction pointer     = 0x8:0xffffffff80598b36
  stack pointer           = 0x10:0xffffffff87c556b0
  frame pointer           = 0x10:0xffffff0007aa9260
  code segment            = base 0x00, lmit 0xfffff, type 0x1b
                          = DPL 0, pres 1, long 1, def32 0, gran 1
  processor eflags        = resume, IOPL = 0
  current process         = 1 (init)
  trap number             = 12
  panic: page fault


This is on an machine with an Athlon64 X2 CPU.

As it was running fine with kvm 28, I tried to mix kvm 28 and kvm 29. It
fails when using modules from kvm 29, whatever the version of the
userland part. This looks like a problem in the kernel modules.

Please also note that GNU/kFreeBSD i386 is working fine with kvm 29 on
the same machine.

Please tell me what I can do to help debugging this problem. 
Alternatively I have uploaded an image to reproduce the problem here:
http://temp.aurel32.net/kfreebsd-amd64.img.gz

Thanks,
Aurelien

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
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] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found] ` <20070714170618.GB6527-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
@ 2007-07-15  6:23   ` Avi Kivity
       [not found]     ` <4699BD63.8010904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  2007-07-18  7:46   ` Aurelien Jarno
  2007-07-20  6:50   ` Avi Kivity
  2 siblings, 1 reply; 13+ messages in thread
From: Avi Kivity @ 2007-07-15  6:23 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Aurelien Jarno wrote:
> Hi,
>
> I have just updated my system from kvm 28 to kvm 29, and a GNU/kFreeBSD
> amd64 system fails to boot with the following error:
>
>   Fatal trap 12 with interrupts disabled
>
>
>   Fatal trap 12: page fault while in kernel mode
>   fault virtual address   = 0x7aa93e0
>   fault code              = supervisor read, page not present
>   instruction pointer     = 0x8:0xffffffff80598b36
>   stack pointer           = 0x10:0xffffffff87c556b0
>   frame pointer           = 0x10:0xffffff0007aa9260
>   code segment            = base 0x00, lmit 0xfffff, type 0x1b
>                           = DPL 0, pres 1, long 1, def32 0, gran 1
>   processor eflags        = resume, IOPL = 0
>   current process         = 1 (init)
>   trap number             = 12
>   panic: page fault
>
>
> This is on an machine with an Athlon64 X2 CPU.
>
> As it was running fine with kvm 28, I tried to mix kvm 28 and kvm 29. It
> fails when using modules from kvm 29, whatever the version of the
> userland part. This looks like a problem in the kernel modules.
>
> Please also note that GNU/kFreeBSD i386 is working fine with kvm 29 on
> the same machine.
>
> Please tell me what I can do to help debugging this problem. 
> Alternatively I have uploaded an image to reproduce the problem here:
> http://temp.aurel32.net/kfreebsd-amd64.img.gz
>
>   

Can you bisect kvm to find the offending commit?  Basically, you do a

  git clone git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git
  cd kvm
  git bisect start drivers/kvm/
  bit bisect bad kvm-29
  git bisect good kvm-28

git will check out a test candidate; go to your kvm userspace directory 
and do

  make -C kernel sync LINUX=/path/to/the/kvm/git/directory
  make -C kernel
  sudo make -C kernel install

reload the module, test, and issue 'git bisect good' or 'git bisect bad' 
according to the result.  As there are only 25 commits you should be 
done in 5 cycles.

-- 
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] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]     ` <4699BD63.8010904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-07-15 12:11       ` Aurelien Jarno
       [not found]         ` <20070715121159.GO3941-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-15 12:11 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Sun, Jul 15, 2007 at 09:23:31AM +0300, Avi Kivity wrote:
> Can you bisect kvm to find the offending commit?  Basically, you do a
> 
>   git clone git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git
>   cd kvm
>   git bisect start drivers/kvm/
>   bit bisect bad kvm-29
>   git bisect good kvm-28
> 
> git will check out a test candidate; go to your kvm userspace directory 
> and do
> 
>   make -C kernel sync LINUX=/path/to/the/kvm/git/directory
>   make -C kernel
>   sudo make -C kernel install
> 
> reload the module, test, and issue 'git bisect good' or 'git bisect bad' 
> according to the result.  As there are only 25 commits you should be 
> done in 5 cycles.
> 

And the result is:

commit ba9c20c048726037664d303362b688759fdf6e9d
Author: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date:   Tue Jun 19 22:41:20 2007 +0200

    KVM: Fix x86 emulator writeback
    
    When the old value and new one are the same the emulator skips the
    write; this is undesirable when the destination is a MMIO area and the
    write shall be performed regardless of the previous value. This
    optimization breaks e.g. a Linux guest APIC compiled without
    X86_GOOD_APIC.
    
    Remove the check and perform the writeback stage in the emulation unless
    it's explicitly disabled (currently push and some 2 bytes instructions
    may disable the writeback).
    
    Signed-Off-By: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    Signed-off-by: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>


I have tried to revert this patch directly into kvm-29, and it also
fixes the problem.

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
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] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]         ` <20070715121159.GO3941-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
@ 2007-07-15 12:30           ` Avi Kivity
       [not found]             ` <469A1373.5090904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Avi Kivity @ 2007-07-15 12:30 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

[-- Attachment #1: Type: text/plain, Size: 1960 bytes --]

Aurelien Jarno wrote:
> On Sun, Jul 15, 2007 at 09:23:31AM +0300, Avi Kivity wrote:
>   
>> Can you bisect kvm to find the offending commit?  Basically, you do a
>>
>>   git clone git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git
>>   cd kvm
>>   git bisect start drivers/kvm/
>>   bit bisect bad kvm-29
>>   git bisect good kvm-28
>>
>> git will check out a test candidate; go to your kvm userspace directory 
>> and do
>>
>>   make -C kernel sync LINUX=/path/to/the/kvm/git/directory
>>   make -C kernel
>>   sudo make -C kernel install
>>
>> reload the module, test, and issue 'git bisect good' or 'git bisect bad' 
>> according to the result.  As there are only 25 commits you should be 
>> done in 5 cycles.
>>
>>     
>
> And the result is:
>
> commit ba9c20c048726037664d303362b688759fdf6e9d
> Author: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Date:   Tue Jun 19 22:41:20 2007 +0200
>
>     KVM: Fix x86 emulator writeback
>     
>     When the old value and new one are the same the emulator skips the
>     write; this is undesirable when the destination is a MMIO area and the
>     write shall be performed regardless of the previous value. This
>     optimization breaks e.g. a Linux guest APIC compiled without
>     X86_GOOD_APIC.
>     
>     Remove the check and perform the writeback stage in the emulation unless
>     it's explicitly disabled (currently push and some 2 bytes instructions
>     may disable the writeback).
>     
>     Signed-Off-By: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>     Signed-off-by: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
>
>
> I have tried to revert this patch directly into kvm-29, and it also
> fixes the problem.
>
>   

 From a cursory inspection, looks like the cmov instructions were broken 
by the patch.  Can you try the attached patch on top of kvm-29?


-- 
error compiling committee.c: too many arguments to function


[-- Attachment #2: cmov.patch --]
[-- Type: text/x-patch, Size: 1731 bytes --]

diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index f60012d..7974012 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -1225,40 +1225,40 @@ twobyte_insn:
 		break;
 	case 0x40 ... 0x4f:	/* cmov */
 		dst.val = dst.orig_val = src.val;
-		d &= ~Mov;	/* default to no move */
+		no_wb = 1;	/* default to no move */
 		/*
 		 * First, assume we're decoding an even cmov opcode
 		 * (lsb == 0).
 		 */
 		switch ((b & 15) >> 1) {
 		case 0:	/* cmovo */
-			d |= (_eflags & EFLG_OF) ? Mov : 0;
+			no_wb &= (_eflags & EFLG_OF) ? 0 : 1;
 			break;
 		case 1:	/* cmovb/cmovc/cmovnae */
-			d |= (_eflags & EFLG_CF) ? Mov : 0;
+			no_wb &= (_eflags & EFLG_CF) ? 0 : 1;
 			break;
 		case 2:	/* cmovz/cmove */
-			d |= (_eflags & EFLG_ZF) ? Mov : 0;
+			no_wb &= (_eflags & EFLG_ZF) ? 0 : 1;
 			break;
 		case 3:	/* cmovbe/cmovna */
-			d |= (_eflags & (EFLG_CF | EFLG_ZF)) ? Mov : 0;
+			no_wb &= (_eflags & (EFLG_CF | EFLG_ZF)) ? 0 : 1;
 			break;
 		case 4:	/* cmovs */
-			d |= (_eflags & EFLG_SF) ? Mov : 0;
+			no_wb &= (_eflags & EFLG_SF) ? 0 : 1;
 			break;
 		case 5:	/* cmovp/cmovpe */
-			d |= (_eflags & EFLG_PF) ? Mov : 0;
+			no_wb &= (_eflags & EFLG_PF) ? 0 : 1;
 			break;
 		case 7:	/* cmovle/cmovng */
-			d |= (_eflags & EFLG_ZF) ? Mov : 0;
+			no_wb &= (_eflags & EFLG_ZF) ? 0 : 1;
 			/* fall through */
 		case 6:	/* cmovl/cmovnge */
-			d |= (!(_eflags & EFLG_SF) !=
-			      !(_eflags & EFLG_OF)) ? Mov : 0;
+			no_wb &= (!(_eflags & EFLG_SF) !=
+			      !(_eflags & EFLG_OF)) ? 0 : 1;
 			break;
 		}
 		/* Odd cmov opcodes (lsb == 1) have inverted sense. */
-		d ^= (b & 1) ? Mov : 0;
+		no_wb ^= (b & 1) ? 1 : 0;
 		break;
 	case 0xb0 ... 0xb1:	/* cmpxchg */
 		/*

[-- 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] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]             ` <469A1373.5090904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-07-15 13:11               ` Aurelien Jarno
  0 siblings, 0 replies; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-15 13:11 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Sun, Jul 15, 2007 at 03:30:43PM +0300, Avi Kivity wrote:
> Aurelien Jarno wrote:
> >On Sun, Jul 15, 2007 at 09:23:31AM +0300, Avi Kivity wrote:
> >  
> >>Can you bisect kvm to find the offending commit?  Basically, you do a
> >>
> >>  git clone git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git
> >>  cd kvm
> >>  git bisect start drivers/kvm/
> >>  bit bisect bad kvm-29
> >>  git bisect good kvm-28
> >>
> >>git will check out a test candidate; go to your kvm userspace directory 
> >>and do
> >>
> >>  make -C kernel sync LINUX=/path/to/the/kvm/git/directory
> >>  make -C kernel
> >>  sudo make -C kernel install
> >>
> >>reload the module, test, and issue 'git bisect good' or 'git bisect bad' 
> >>according to the result.  As there are only 25 commits you should be 
> >>done in 5 cycles.
> >>
> >>    
> >
> >And the result is:
> >
> >commit ba9c20c048726037664d303362b688759fdf6e9d
> >Author: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> >Date:   Tue Jun 19 22:41:20 2007 +0200
> >
> >    KVM: Fix x86 emulator writeback
> >    
> >    When the old value and new one are the same the emulator skips the
> >    write; this is undesirable when the destination is a MMIO area and the
> >    write shall be performed regardless of the previous value. This
> >    optimization breaks e.g. a Linux guest APIC compiled without
> >    X86_GOOD_APIC.
> >    
> >    Remove the check and perform the writeback stage in the emulation 
> >    unless
> >    it's explicitly disabled (currently push and some 2 bytes instructions
> >    may disable the writeback).
> >    
> >    Signed-Off-By: Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> >    Signed-off-by: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
> >
> >
> >I have tried to revert this patch directly into kvm-29, and it also
> >fixes the problem.
> >
> >  
> 
> From a cursory inspection, looks like the cmov instructions were broken 
> by the patch.  Can you try the attached patch on top of kvm-29?
> 

Unfortunately this does not fix the problem.

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
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] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found] ` <20070714170618.GB6527-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
  2007-07-15  6:23   ` Avi Kivity
@ 2007-07-18  7:46   ` Aurelien Jarno
  2007-07-20  6:50   ` Avi Kivity
  2 siblings, 0 replies; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-18  7:46 UTC (permalink / raw)
  To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Sat, Jul 14, 2007 at 07:06:18PM +0200, Aurelien Jarno wrote:
> Hi,
> 
> I have just updated my system from kvm 28 to kvm 29, and a GNU/kFreeBSD
> amd64 system fails to boot with the following error:
> 
>   Fatal trap 12 with interrupts disabled
> 
> 
>   Fatal trap 12: page fault while in kernel mode
>   fault virtual address   = 0x7aa93e0
>   fault code              = supervisor read, page not present
>   instruction pointer     = 0x8:0xffffffff80598b36
>   stack pointer           = 0x10:0xffffffff87c556b0
>   frame pointer           = 0x10:0xffffff0007aa9260
>   code segment            = base 0x00, lmit 0xfffff, type 0x1b
>                           = DPL 0, pres 1, long 1, def32 0, gran 1
>   processor eflags        = resume, IOPL = 0
>   current process         = 1 (init)
>   trap number             = 12
>   panic: page fault
> 
> 
> This is on an machine with an Athlon64 X2 CPU.
> 
> As it was running fine with kvm 28, I tried to mix kvm 28 and kvm 29. It
> fails when using modules from kvm 29, whatever the version of the
> userland part. This looks like a problem in the kernel modules.
> 
> Please also note that GNU/kFreeBSD i386 is working fine with kvm 29 on
> the same machine.
> 

I have just seen the same failure on an i386 guest. It seems the failure
happens very rarely, but it happens.

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
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] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found] ` <20070714170618.GB6527-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
  2007-07-15  6:23   ` Avi Kivity
  2007-07-18  7:46   ` Aurelien Jarno
@ 2007-07-20  6:50   ` Avi Kivity
       [not found]     ` <46A05B23.50409-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  2 siblings, 1 reply; 13+ messages in thread
From: Avi Kivity @ 2007-07-20  6:50 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Aurelien Jarno wrote:
> Hi,
>
> I have just updated my system from kvm 28 to kvm 29, and a GNU/kFreeBSD
> amd64 system fails to boot with the following error:
>
>   Fatal trap 12 with interrupts disabled
>
>
>   Fatal trap 12: page fault while in kernel mode
>   fault virtual address   = 0x7aa93e0
>   fault code              = supervisor read, page not present
>   instruction pointer     = 0x8:0xffffffff80598b36
>   stack pointer           = 0x10:0xffffffff87c556b0
>   frame pointer           = 0x10:0xffffff0007aa9260
>   code segment            = base 0x00, lmit 0xfffff, type 0x1b
>                           = DPL 0, pres 1, long 1, def32 0, gran 1
>   processor eflags        = resume, IOPL = 0
>   current process         = 1 (init)
>   trap number             = 12
>   panic: page fault
>
>
> This is on an machine with an Athlon64 X2 CPU.
>
> As it was running fine with kvm 28, I tried to mix kvm 28 and kvm 29. It
> fails when using modules from kvm 29, whatever the version of the
> userland part. This looks like a problem in the kernel modules.
>
> Please also note that GNU/kFreeBSD i386 is working fine with kvm 29 on
> the same machine.
>
> Please tell me what I can do to help debugging this problem. 
> Alternatively I have uploaded an image to reproduce the problem here:
> http://temp.aurel32.net/kfreebsd-amd64.img.g

I've downloaded the image and booted it three times using kvm HEAD. 
Each time I got to the login prompt.

Is this always reproducible?  Can you check with kvm HEAD (not that I
think of anything that could have fixed this).


-- 
Do not meddle in the internals of kernels, for they are subtle and quick to panic.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]     ` <46A05B23.50409-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-07-20  6:57       ` Avi Kivity
       [not found]         ` <46A05CF3.1070900-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Avi Kivity @ 2007-07-20  6:57 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Avi Kivity wrote:
>> Please tell me what I can do to help debugging this problem. 
>> Alternatively I have uploaded an image to reproduce the problem here:
>> http://temp.aurel32.net/kfreebsd-amd64.img.g
>>     
>
> I've downloaded the image and booted it three times using kvm HEAD. 
> Each time I got to the login prompt.
>
> Is this always reproducible?  Can you check with kvm HEAD (not that I
> think of anything that could have fixed this).
>
>   

Sorry, that was on Intel.  It reproduces easily on AMD.

-- 
Do not meddle in the internals of kernels, for they are subtle and quick to panic.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]         ` <46A05CF3.1070900-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-07-20 22:20           ` Aurelien Jarno
  2007-07-24 23:17           ` Aurelien Jarno
  1 sibling, 0 replies; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-20 22:20 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Fri, Jul 20, 2007 at 09:57:55AM +0300, Avi Kivity wrote:
> Avi Kivity wrote:
> >> Please tell me what I can do to help debugging this problem. 
> >> Alternatively I have uploaded an image to reproduce the problem here:
> >> http://temp.aurel32.net/kfreebsd-amd64.img.g
> >>     
> >
> > I've downloaded the image and booted it three times using kvm HEAD. 
> > Each time I got to the login prompt.
> >
> > Is this always reproducible?  Can you check with kvm HEAD (not that I
> > think of anything that could have fixed this).
> >
> >   
> 
> Sorry, that was on Intel.  It reproduces easily on AMD.
> 

Yep, I have just been able to test it on a Core 2 CPU, and everything
works nicely.

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]         ` <46A05CF3.1070900-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  2007-07-20 22:20           ` Aurelien Jarno
@ 2007-07-24 23:17           ` Aurelien Jarno
       [not found]             ` <20070724231700.GD28101-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
  1 sibling, 1 reply; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-24 23:17 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Fri, Jul 20, 2007 at 09:57:55AM +0300, Avi Kivity wrote:
> Avi Kivity wrote:
> >> Please tell me what I can do to help debugging this problem. 
> >> Alternatively I have uploaded an image to reproduce the problem here:
> >> http://temp.aurel32.net/kfreebsd-amd64.img.g
> >>     
> >
> > I've downloaded the image and booted it three times using kvm HEAD. 
> > Each time I got to the login prompt.
> >
> > Is this always reproducible?  Can you check with kvm HEAD (not that I
> > think of anything that could have fixed this).
> >
> >   
> 
> Sorry, that was on Intel.  It reproduces easily on AMD.

By comparing the cases were the old and the new condition are different,
I have found that the problem occurs for the lmsw and smsw instructions.

The patch below is very ugly, but it workarounds the problem.

diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index 21ce977..6c1523f 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -1206,11 +1206,13 @@ twobyte_insn:
 				goto cannot_emulate;
 			*(u16 *)&_regs[modrm_rm]
 				= realmode_get_cr(ctxt->vcpu, 0);
+			no_wb = 1;
 			break;
 		case 6: /* lmsw */
 			if (modrm_mod != 3)
 				goto cannot_emulate;
 			realmode_lmsw(ctxt->vcpu, (u16)modrm_val, &_eflags);
+			no_wb = 1;
 			break;
 		case 7: /* invlpg*/

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]             ` <20070724231700.GD28101-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
@ 2007-07-25  3:14               ` Avi Kivity
       [not found]                 ` <46A6C00C.8030609-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Avi Kivity @ 2007-07-25  3:14 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Aurelien Jarno wrote:
> On Fri, Jul 20, 2007 at 09:57:55AM +0300, Avi Kivity wrote:
>   
>> Avi Kivity wrote:
>>     
>>>> Please tell me what I can do to help debugging this problem. 
>>>> Alternatively I have uploaded an image to reproduce the problem here:
>>>> http://temp.aurel32.net/kfreebsd-amd64.img.g
>>>>     
>>>>         
>>> I've downloaded the image and booted it three times using kvm HEAD. 
>>> Each time I got to the login prompt.
>>>
>>> Is this always reproducible?  Can you check with kvm HEAD (not that I
>>> think of anything that could have fixed this).
>>>
>>>   
>>>       
>> Sorry, that was on Intel.  It reproduces easily on AMD.
>>     
>
> By comparing the cases were the old and the new condition are different,
> I have found that the problem occurs for the lmsw and smsw instructions.
>   

Ah, I was looking at amd-specific instructions (vmx decodes lmsw) but
missed these two.  Good work.

> The patch below is very ugly, but it workarounds the problem.
>   

It's not ugly, it just lives in an ugly function.  But it does lack a
changelog and a signoff.

As to the ugliness, prehaps no_wb should be part of the opcode
descriptor bitmask (opcode_table and friend).

> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
> index 21ce977..6c1523f 100644
> --- a/drivers/kvm/x86_emulate.c
> +++ b/drivers/kvm/x86_emulate.c
> @@ -1206,11 +1206,13 @@ twobyte_insn:
>  				goto cannot_emulate;
>  			*(u16 *)&_regs[modrm_rm]
>  				= realmode_get_cr(ctxt->vcpu, 0);
> +			no_wb = 1;
>  			break;
>  		case 6: /* lmsw */
>  			if (modrm_mod != 3)
>  				goto cannot_emulate;
>  			realmode_lmsw(ctxt->vcpu, (u16)modrm_val, &_eflags);
> +			no_wb = 1;
>  			break;
>  		case 7: /* invlpg*/
>
>   


-- 
Do not meddle in the internals of kernels, for they are subtle and quick to panic.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]                 ` <46A6C00C.8030609-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-07-25  8:19                   ` Aurelien Jarno
       [not found]                     ` <20070725081954.GA14103-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Aurelien Jarno @ 2007-07-25  8:19 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

On Wed, Jul 25, 2007 at 06:14:20AM +0300, Avi Kivity wrote:
> Aurelien Jarno wrote:
> > On Fri, Jul 20, 2007 at 09:57:55AM +0300, Avi Kivity wrote:
> >   
> >> Avi Kivity wrote:
> >>     
> >>>> Please tell me what I can do to help debugging this problem. 
> >>>> Alternatively I have uploaded an image to reproduce the problem here:
> >>>> http://temp.aurel32.net/kfreebsd-amd64.img.g
> >>>>     
> >>>>         
> >>> I've downloaded the image and booted it three times using kvm HEAD. 
> >>> Each time I got to the login prompt.
> >>>
> >>> Is this always reproducible?  Can you check with kvm HEAD (not that I
> >>> think of anything that could have fixed this).
> >>>
> >>>   
> >>>       
> >> Sorry, that was on Intel.  It reproduces easily on AMD.
> >>     
> >
> > By comparing the cases were the old and the new condition are different,
> > I have found that the problem occurs for the lmsw and smsw instructions.
> >   
> 
> Ah, I was looking at amd-specific instructions (vmx decodes lmsw) but
> missed these two.  Good work.
> 
> > The patch below is very ugly, but it workarounds the problem.
> >   
> 
> It's not ugly, it just lives in an ugly function.  But it does lack a
> changelog and a signoff.
> 

After a short discussion on IRC, it seems that all 0x02 0x01
instructions do not use the writeback. Please find an updated and
signedoff patch below.

  KVM: disable writeback for 0x02 0x01 instructions.

  0x02 0x01 instructions (ie lgdt, lidt, smsw, lmsw and invlpg) does
  not use writeback. This patch set no_wb=1 when emulating those 
  instructions.

  Signed-off-by: Aurelien Jarno <aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org>

diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index 21ce977..cbbb9c5 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -1183,6 +1183,8 @@ pop_instruction:
 twobyte_insn:
 	switch (b) {
 	case 0x01: /* lgdt, lidt, lmsw */
+		/* Disable writeback. */
+		no_wb = 1;
 		switch (modrm_reg) {
 			u16 size;
 			unsigned long address;
 

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org         | aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org
   `-    people.debian.org/~aurel32 | www.aurel32.net

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD
       [not found]                     ` <20070725081954.GA14103-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
@ 2007-07-25  8:27                       ` Avi Kivity
  0 siblings, 0 replies; 13+ messages in thread
From: Avi Kivity @ 2007-07-25  8:27 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

Aurelien Jarno wrote:
> After a short discussion on IRC, it seems that all 0x02 0x01
> instructions do not use the writeback. Please find an updated and
> signedoff patch below.
>
>   KVM: disable writeback for 0x02 0x01 instructions.
>
>   0x02 0x01 instructions (ie lgdt, lidt, smsw, lmsw and invlpg) does
>   not use writeback. This patch set no_wb=1 when emulating those 
>   instructions.
>
>   Signed-off-by: Aurelien Jarno <aurelien-rXXEIb44qovR7s880joybQ@public.gmane.org>
>   

It's in, thanks.

-- 
Do not meddle in the internals of kernels, for they are subtle and quick to panic.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2007-07-25  8:27 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-14 17:06 KVM 29: Page fault in kernel mode while booting GNU/kFreeBSD Aurelien Jarno
     [not found] ` <20070714170618.GB6527-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
2007-07-15  6:23   ` Avi Kivity
     [not found]     ` <4699BD63.8010904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-15 12:11       ` Aurelien Jarno
     [not found]         ` <20070715121159.GO3941-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
2007-07-15 12:30           ` Avi Kivity
     [not found]             ` <469A1373.5090904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-15 13:11               ` Aurelien Jarno
2007-07-18  7:46   ` Aurelien Jarno
2007-07-20  6:50   ` Avi Kivity
     [not found]     ` <46A05B23.50409-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-20  6:57       ` Avi Kivity
     [not found]         ` <46A05CF3.1070900-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-20 22:20           ` Aurelien Jarno
2007-07-24 23:17           ` Aurelien Jarno
     [not found]             ` <20070724231700.GD28101-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
2007-07-25  3:14               ` Avi Kivity
     [not found]                 ` <46A6C00C.8030609-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-25  8:19                   ` Aurelien Jarno
     [not found]                     ` <20070725081954.GA14103-OqXK5JiLQY5aJl8KAwiEcA@public.gmane.org>
2007-07-25  8:27                       ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox