On Mon, Sep 20, 2010 at 11:47:49AM +0200, Avi Kivity wrote:
On 09/19/2010 11:54 PM, Kevin O'Connor wrote:
Are you okay with me applying this patch series to seabios? It will cause kvm guest reboots to turn into shutdowns until kvm can be changed.
Well, we can change development versions of kvm, but not deployed ones. If we apply this then we break many kvm installations.
However, if the problem is in qemu-kvm (not unlikely) then we can update qemu simultaneously with seabios. Since seabios is deployed together with qemu, that shouldn't break installations.
Can you post a git tree for me to test? I'd like to understand the issue better.
Here's a simple test case - grab the latest from git://git.linuxtogo.org/home/kevin/seabios.git and apply the patch below. Then run:
kvm-qemu -chardev stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios
At the top of the output, you'll see:
1: myvar@0x000f60bc=0 myvardelta@0xffff60bc=0 2: myvar@0x000f60bc=99 myvardelta@0xffff60bc=99 3: myvar@0x000f60bc=13 myvardelta@0xffff60bc=13
Basically, writes to 0xf0000 are also being seen at 0xffff0000 which is incorrect. Gleb's patch to qemu-kvm fixes the problem.
-Kevin
diff --git a/src/post.c b/src/post.c index 5d0e2cb..e4b5f0b 100644 --- a/src/post.c +++ b/src/post.c @@ -89,6 +89,21 @@ init_bda(void) static void ram_probe(void) { + { + static u32 myvar; + u32 *myvardelta = (void*)&myvar + 0xfff00000; + dprintf(1, "1: myvar@%p=%d myvardelta@%p=%d\n" + , &myvar, myvar, myvardelta, *myvardelta); + barrier(); + myvar = 99; + dprintf(1, "2: myvar@%p=%d myvardelta@%p=%d\n" + , &myvar, myvar, myvardelta, *myvardelta); + barrier(); + myvar = 13; + dprintf(1, "3: myvar@%p=%d myvardelta@%p=%d\n" + , &myvar, myvar, myvardelta, *myvardelta); + } + dprintf(3, "Find memory size\n"); if (CONFIG_COREBOOT) { coreboot_setup();