Re: [libvirt] [Qemu-devel] default slot used for vga device on q35 machines

On 08/02/2013 02:49 AM, Gerd Hoffmann wrote:
Hi,
qemu-kvm -M q35 -nodefaults -nodefconfig -qmp unix:/tmp/qemu,server -vnc :15 -vga std -usb
Then ran "query-pci" in the qmp monitor and found that the vga device is put at slot 1 instead of slot 2.
My questions:
1) Is this difference intentional, or a bug? The vga simply goes into the first free slot. That happens to be #2 with i440fx and #1 with q35.
It sounds like it's a safe bet to assume that -vga will put the device on slot 2 for pc machinetypes and slot 1 for q35, no matter what other devices there are, since -vga is always initialized first. Correct? Do you see any chance that might change in the future? (e.g. due to some other new device that needs to be initialized even before vga)
2) If it's intentional, will the device always be at slot 1 (and trigger an error if something else is also placed at slot 1), or is it just picking the first unused slot? (that would *not* be good, because we must be able to predict what device is in which slot and prevent them from changing from run to run). The vga is the very first (pci) device being created (when selecting via -vga), so it gets the slots mentioned above no matter what, even though simply picking the first unused slot.
3) Does the qxl multihead support really require that the device be at slot 2 (as stated in the above bugzilla commend)? Or is that just a misunderstanding/overstatement? It's not required at all. The problem is that on older qemu versions (pre-memory-api basically) it was impossible to create functional vga devices via -device due to an initialization order issue. Which implies you have to use -vga instead, which in turn implies the vga ends up in slot #2. On i440fx, but q35 didn't exist yet back then ;)
Are you saying that it's still required to use -vga instead of -device qxl-vga for pc machinetype? Or that it was needed at one time, but that is no longer the case? If the latter, is there a reliable way to make the decision whether or not we need to use -vga?

Hi,
1) Is this difference intentional, or a bug? The vga simply goes into the first free slot. That happens to be #2 with i440fx and #1 with q35.
It sounds like it's a safe bet to assume that -vga will put the device on slot 2 for pc machinetypes and slot 1 for q35, no matter what other devices there are, since -vga is always initialized first. Correct?
Yes.
Do you see any chance that might change in the future? (e.g. due to some other new device that needs to be initialized even before vga)
Highly unlikely. Also libvirt will switch over to use -device for vga cards, which will make this a moot point.
3) Does the qxl multihead support really require that the device be at slot 2 (as stated in the above bugzilla commend)? Or is that just a misunderstanding/overstatement? It's not required at all. The problem is that on older qemu versions (pre-memory-api basically) it was impossible to create functional vga devices via -device due to an initialization order issue. Which implies you have to use -vga instead, which in turn implies the vga ends up in slot #2. On i440fx, but q35 didn't exist yet back then ;)
Are you saying that it's still required to use -vga instead of -device qxl-vga for pc machinetype? Or that it was needed at one time, but that is no longer the case? If the latter, is there a reliable way to make the decision whether or not we need to use -vga?
libvirt has started using -device for vga cards, to be able to place them in any pci slot. IIRC it's used for qemu 1.1+ or 1.2+. That works fine for all vga cards except qxl. The bug which broke it for qxl will be fixed in 1.6 (and probably 1.5.3 too). cheers, Gerd

On 08/03/2013 01:32 PM, Laine Stump wrote:
1) Is this difference intentional, or a bug?
The vga simply goes into the first free slot. That happens to be #2 with i440fx and #1 with q35.
It sounds like it's a safe bet to assume that -vga will put the device on slot 2 for pc machinetypes and slot 1 for q35, no matter what other devices there are, since -vga is always initialized first. Correct? Do you see any chance that might change in the future? (e.g. due to some other new device that needs to be initialized even before vga)
Any future qemu will be new enough to not require the use of -vga, so we only have to worry about the behavior of 1.5 and earlier with regards to placement of -vga.
2) If it's intentional, will the device always be at slot 1 (and trigger an error if something else is also placed at slot 1), or is it just picking the first unused slot? (that would *not* be good, because we must be able to predict what device is in which slot and prevent them from changing from run to run). The vga is the very first (pci) device being created (when selecting via -vga), so it gets the slots mentioned above no matter what, even though simply picking the first unused slot.
3) Does the qxl multihead support really require that the device be at slot 2 (as stated in the above bugzilla commend)? Or is that just a misunderstanding/overstatement? It's not required at all. The problem is that on older qemu versions (pre-memory-api basically) it was impossible to create functional vga devices via -device due to an initialization order issue. Which implies you have to use -vga instead, which in turn implies the vga ends up in slot #2. On i440fx, but q35 didn't exist yet back then ;)
Are you saying that it's still required to use -vga instead of -device qxl-vga for pc machinetype? Or that it was needed at one time, but that is no longer the case? If the latter, is there a reliable way to make the decision whether or not we need to use -vga?
Regarding the decision on whether to use -device or -vga, our hands are tied. With qemu 1.5 or earlier, we HAVE to use -vga, where spice initialization had a bug such that use of -device would not display the mouse. That bug has been fixed for qemu 1.6, so for qemu 1.6, we prefer to use -device. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (3)
-
Eric Blake
-
Gerd Hoffmann
-
Laine Stump