Hide Forgot
Description of problem: Too big value(more than 128Mb) of QXL-VGA ram_size and vram_size cause VM paused (internal-error), this is not accepted. Version-Release number of selected component (if applicable): # uname -r && rpm -q qemu-kvm 2.6.32-221.el6.x86_64 qemu-kvm-0.12.1.2-2.213.el6.x86_64 How reproducible: 100% Steps to Reproduce: 1.boot a guest with a value(68555555bit) of command line parameter vram_size(ram_size). eg: ...-spice disable-ticketing,port=5912 -vga qxl -global qxl-vga.vram_size=68555555 2. take "info qtree" in the QEMU-monitor. (qemu) info qtree ... dev: qxl-vga, id "" dev-prop: ram_size = 67108864 dev-prop: vram_size = 134217728 ... 3.boot a guest with a value(134217738bit) of command line parameter vram_size(ram_size). eg: ...-spice disable-ticketing,port=5912 -vga qxl -global qxl-vga.vram_size=134217738 4.take "info status" in the QEMU-monitor. Actual results: after the step of 4, the result as following, (qemu) info status VM status: paused (internal-error) Expected results: the guest should boot successfully without any error. Additional info:
Hmm, tougth one. seabios seems to be confused due to running out of address space. 68555555 is rounded to the next power of two (134217738 aka 128M), which doesn't fit into the pci i/o window @ 0xf0000000 seabios log: Start bios (version 0.6.1.2-20120217_061056-x86-004.build.bos.redhat.com) Ram Size=0x08000000 (0x0000000000000000 high) CPU Mhz=2795 PCI: pci_bios_init_bus_rec bus = 0x0 PIIX3/PIIX4 init: elcr=00 0c PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 region 4: 0x0000c000 PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 PCI: bus=0 devfn=0x10: vendor_id=0x1b36 device_id=0x0100 region 0: 0xf0000000 region 1: 0xf8000000 region 2: 0x00000000 region 3: 0x0000c020 region 6: 0x00010000 PCI: bus=0 devfn=0x18: vendor_id=0x10ec device_id=0x8139 region 0: 0x0000c100 region 1: 0x00020000 region 6: 0x00030000 [ hangs here ]
But is there any way that seabios can notify qemu and quit with error? do we even want it to, maybe the bar allocation logic should be duplicated in qemu just for sanity check? if you only fix seabios, then launch with qxl using 256 MB ram (whatever for vram) and seabios correctly doesn't allocate it you get a machine with non working vga, but without any complaints - user will see that as a failure.
Patch posted.
Created attachment 652926 [details] Fix
Fixed in version seabios-0.6.1.2-26.el6
Reproduce this bug as follow version: Host: # uname -r 2.6.32-348.el6.x86_64 # rpm -q qemu-kvm-rhev qemu-kvm-rhev-0.12.1.2-2.346.el6.x86_64 # rpm -q seabios seabios-0.6.1.2-25.el6.x86_64 Steps: 1.Boot a guest with a value(68555555bit) of command line parameter vram_size/ram_size. eg: ...-spice disable-ticketing,port=5912 -vga qxl -global qxl-vga.vram_size=68555555 2. take "info qtree" in the QEMU-monitor. (qemu) info qtree ... dev: qxl-vga, id "" dev-prop: ram_size = 67108864 dev-prop: vram_size = 134217728 ... 3.Boot guest with -spice disable-ticketing,port=5912 -vga qxl -global qxl-vga.vram_size=134217738/qxl-vga.ram_size=134217738 Results: QEMU 0.12.1 monitor - type 'help' for more information (qemu) KVM internal error. Suberror: 1 rax 000000007fffd86d rbx 0000000000000000 rcx 0000000000000000 rdx 0000000000000000 rsi 0000000000000001 rdi 0000000000000001 rsp 0000000000006ea4 rbp 0000000000000004 r8 0000000000000000 r9 0000000000000000 r10 0000000000000000 r11 0000000000000000 r12 0000000000000000 r13 0000000000000000 r14 0000000000000000 r15 0000000000000000 rip 00000000000ef323 rflags 00000002 cs 0008 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type b l 0 g 1 avl 0) ds 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 3 l 0 g 1 avl 0) es 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 3 l 0 g 1 avl 0) ss 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 3 l 0 g 1 avl 0) fs 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 3 l 0 g 1 avl 0) gs 0010 (00000000/ffffffff p 1 dpl 0 db 1 s 1 type 3 l 0 g 1 avl 0) tr 0000 (00000000/0000ffff p 1 dpl 0 db 0 s 0 type b l 0 g 0 avl 0) ldt 0000 (00000000/0000ffff p 1 dpl 0 db 0 s 0 type 2 l 0 g 0 avl 0) gdt fc558/37 idt fdb50/0 cr0 11 cr2 0 cr3 0 cr4 0 cr8 0 efer 0 emulation failure, check dmesg for details (qemu) (qemu) info status VM status: paused (internal-error) (qemu) Verify this bug as follow version: Host: # uname -r 2.6.32-348.el6.x86_64 # rpm -q qemu-kvm-rhev qemu-kvm-rhev-0.12.1.2-2.346.el6.x86_64 # rpm -q seabios seabios-0.6.1.2-26.el6.x86_64 Steps: 1.Boot guest with -spice disable-ticketing,port=5912 -vga qxl -global qxl-vga.vram_size=134217738/qxl-vga.ram_size=134217738 Results: (qemu) info status VM status: running Addinfo: 1)Tried more than 15 times.Guest boot successfully. 2)Tried other value(536870922/2343321122),guest boot successfully and work well. 3)Tests include "qxl-vga.ram_size/qxl-vga.vram_size" According to above test ,this bug fixed.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHBA-2013-0307.html