On 09/16/16 15:44, Andrea Bolognani wrote:
On Fri, 2016-09-16 at 15:20 +0200, Pavel Hrdina wrote:
>> There is something I wanted to clarify with Laszlo: is
>> virtio-gpu-pci ever going to be usable on other architectures
>> such as x86_64? Maybe it already is? Because if that's the
>> case, we'll want to be able to choose between virtio-vga and
>> virtio-gpu-pci.
>>
>> One solution would be to keep mapping model='virtio' to
>> virtio-vga and create a new model='virtio-gpu' that maps to
>> virtio-gpu-pci, then forbid aarch64 mach-virt guests to use
>> model='virtio'. Or something like that, I'm not married to
>> the idea, I just think it's something we should definitely
>> think about before this ends up in a release.
>
> I have some patches in my TODO branch that will rewrite the video
> device code. virtio-gpu-pci is usable also on other architectures
> but it lacks the VGA compatibility mode. In libvirt all primary
> video devices for x86 architecture have VGA mode. Currently we
> allow only QXL to be used as secondary video device and now with
> the virtio-gpu-pci it could be also used as secondary video device.
>
> The solution would be simple, there is no need to add a new video
> model 'virtio-gpu', we will use the existing model 'virtio', but
> depending on architecture and also whether it's primary or
> secondary video device we will use appropriate device.
> We already do this for QXL.
I don't know much about video devices, so forgive me if I'm
asking silly questions, but what is preventing you (on x86)
from having virtio-vga as secondary video device?
The "VGA compatibility" stuff in virtio-vga is not just the linear
framebuffer that lives in one of its MMIO BARs. VGA compatibility is
much larger baggage; for example, it involves hard-coded ISA IO ports.
Alex Williamson discusses VGA arbitration in the following blog post:
http://vfio.blogspot.com/2014/08/whats-deal-with-vga-arbitration.html
So the short answer is that "VGA compatibility" includes things that you
mostly want to have *exactly one* instance of, in your x86 system. Zero
instances of those things, and you might lose compatibility with some
software; more than one instance of that stuff, and things get really
messy with arbitration (hard-coded IO ports and MMIO ranges).
So, even in the physical word, a multi-graphics-card x86 workstation
usually has one primary VGA card (nowadays likely as an integrated
device), carrying the legacy baggage; and then a number of secondary
GPUs (that have none of that baggage).
Or
virtio-gpu-pci as primary video device?
I described this earlier -- virtio-gpu-pci is more limited than
virtio-vga as a primary graphics card, so wherever you can go with
virtio-vga as primary, you'll do that. In aarch64/KVM guests however,
virtio-vga is not an option, and the more limited (as primary)
virtio-gpu-pci card is still better (much better) than nothing.
Thanks
Laszlo