On 07/29/12 18:54, Gleb Natapov wrote:
On Sun, Jul 29, 2012 at 06:50:09PM +0100, Chris Clayton wrote:
On 07/29/12 17:34, Avi Kivity wrote:
On 07/29/2012 06:47 PM, Avi Kivity wrote:
What might have happened is that the movdqu instruction faulted (as it's
an fpu instruction), and on the way back from the fault, ds and es
didn't get restored correctly.
You can test this by writing a trivial version of g_str_equal()
somewhere in the qemu source code and rebuilding it.
>from entry_32.S:
.macro RESTORE_REGS pop=0
RESTORE_INT_REGS
1: popl_cfi %ds
/*CFI_RESTORE ds;*/
2: popl_cfi %es
/*CFI_RESTORE es;*/
3: popl_cfi %fs
/*CFI_RESTORE fs;*/
POP_GS \pop
.pushsection .fixup, "ax"
4: movl $0, (%esp)
jmp 1b
5: movl $0, (%esp)
jmp 2b
6: movl $0, (%esp)
jmp 3b
.popsection
this piece of code tries to restore %ds, and if it fails, zeros it,
which is consistent with the core dump.
This could happen if kvm is failing to restore GDT correctly.
Possible culprit: b2da15ac26a0c00.
That commit isn't in qermu-kvm-1.1.1.
It is in kernel.
Sorry, so it is.
With kernel 3.5.0 with b2da15ac26a0c00 reverted, I have just had 15
clean invocations of vanilla qemu-kvm-1.1.1. So that commit would seem
to be the problem.
I'm testing a build with g_str_equal implemented in kvm.c and so far
I haven't had a crash in 6 invocations. That hasn't been possible
with vanilla qemu-kvm-1.1.{0,1}, but I'll do a few more, just to be
sure.
Similarly, with my "local" implementation of g_str_equal, I've had 15
clean invocations on vanilla kernel 3.5.0.
I'm more than happy to test patches to fix this regression, but it will
be tomorrow before I will be able to do so.
Thanks for your help, Avi.
--
Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html