Message ID | 20100625155506.24259.20859.malone@palladium.canonical.com |
---|---|
State | New |
Headers | show |
Cole Robinson <crobinso@redhat.com> writes: > I can reproduce with qemu-kvm 0.12.4 like the original reporter. I > cannot reproduce with qemu-kvm upstream, qemu stable, or qemu upstream. > So boot=on could be the culprit. Libvirt generated command line: > > LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin > /qemu-system-x86_64 -S -M pc-0.12 -no-kvm -m 512 -smp > 1,sockets=1,cores=1,threads=1 -name winxp_test -uuid 634dff56-8c5a-fdbb- > b5fc-091bcf78e586 -nodefaults -chardev > socket,id=monitor,path=/var/lib/libvirt/qemu/winxp_test.monitor,server,nowait > -mon chardev=monitor,mode=readline -rtc base=localtime -boot c -drive > file=/var/lib/libvirt/images/winxp_test.img,if=none,id=drive- > ide0-0-0,boot=on,format=raw -device ide-drive,bus=ide.0,unit=0,drive > =drive-ide0-0-0,id=ide0-0-0 -drive > file=/mnt/data/media/win_xp_sp3_32.iso,if=none,media=cdrom,id=drive- > ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive > =drive-ide0-1-0,id=ide0-1-0 -device > rtl8139,vlan=0,id=net0,mac=52:54:00:ac:e8:ca,bus=pci.0,addr=0x4 -net > tap,fd=20,vlan=0,name=hostnet0 -chardev pty,id=serial0 -device isa- > serial,chardev=serial0 -usb -device usb-tablet,id=input0 -vnc > 127.0.0.1:1 -k en-us -vga std -device virtio-balloon- > pci,id=balloon0,bus=pci.0,addr=0x3 > > Markus has a patch internally against an older qemu-kvm release that > apparently fixes the issue, however the upstream code is different so it > doesn't cleanly apply. Maybe this will give someone a hint for a proper > upstream solution: [snipp...] That's only the second part of a revolting emergency hack. Anyway, I posted a fix for current master yesterday: Subject: [PATCH 12/12] pc: Fix CMOS info for drives defined with -device Date: Fri, 25 Jun 2010 18:53:32 +0200 Message-Id: <1277484812-22012-13-git-send-email-armbru@redhat.com> If it still needs backporting it to stable when I've dug myself out of my current pit, I'll give it a try. Wouldn't mind if somebody else beat me to it.
diff --git a/hw/pc.c b/hw/pc.c index d142282..c60a79a 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -271,12 +271,16 @@ static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, */ for (i = 0; i < 4; i++) { char id[32]; + int cylinders, heads, secs; if (hd_table[i]) continue; snprintf(id, sizeof(id), "drive-ide0-%d-%d", i / MAX_IDE_DEVS, i % MAX_IDE_DEVS); hd_table[i] = drive_get_by_id(id); + if (hd_table[i]) { + bdrv_guess_geometry(hd_table[i]->bdrv, &cylinders, &heads, &secs); + } } /* various important CMOS locations needed by PC/Bochs bios */