• L
    qemu: map "virtio" video model to "virt" machtype correctly (arm/aarch64) · 706b5b62
    Laszlo Ersek 提交于
    Most of QEMU's PCI display device models, such as:
    
      libvirt video/model/@type  QEMU -device
      -------------------------  ------------
      cirrus                     cirrus-vga
      vga                        VGA
      qxl                        qxl-vga
      virtio                     virtio-vga
    
    come with a linear framebuffer (sometimes called "VGA compatibility
    framebuffer"). This linear framebuffer lives in one of the PCI device's
    MMIO BARs, and allows guest code (primarily: firmware drivers, and
    non-accelerated OS drivers) to display graphics with direct memory access.
    
    Due to architectural reasons on aarch64/KVM hosts, this kind of
    framebuffer doesn't / can't work in
    
      qemu-system-(arm|aarch64) -M virt
    
    machines. Cache coherency issues guarantee a corrupted / unusable display.
    The problem has been researched by several people, including kvm-arm
    maintainers, and it's been decided that the best way (practically the only
    way) to have boot time graphics for such guests is to consolidate on
    QEMU's "virtio-gpu-pci" device.
    
    >From <https://bugzilla.redhat.com/show_bug.cgi?id=1195176>, libvirt
    supports
    
      <devices>
        <video>
          <model type='virtio'/>
        </video>
      </devices>
    
    but libvirt unconditionally maps @type='virtio' to QEMU's "virtio-vga"
    device model. (See the qemuBuildDeviceVideoStr() function and the
    "qemuDeviceVideo" enum impl.)
    
    According to the above, this is not right for the "virt" machine type; the
    qemu-system-(arm|aarch64) binaries don't even recognize the "virtio-vga"
    device model (justifiedly). Whereas "virtio-gpu-pci", which is a pure
    virtio device without a compatibility framebuffer, is available, and works
    fine.
    
    (The ArmVirtQemu ("AAVMF") platform of edk2 -- that is, the UEFI firmware
    for "virt" -- supports "virtio-gpu-pci", as of upstream commit
    3ef3209d3028. See
    <https://tianocore.acgmultimedia.com/show_bug.cgi?id=66>.)
    
    Override the default mapping of "virtio", from "virtio-vga" to
    "virtio-gpu-pci", if qemuDomainMachineIsVirt() evaluates to true.
    
    Cc: Andrea Bolognani <abologna@redhat.com>
    Cc: Drew Jones <drjones@redhat.com>
    Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
    Cc: Martin Kletzander <mkletzan@redhat.com>
    Suggested-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1372901Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
    Acked-by: NMartin Kletzander <mkletzan@redhat.com>
    706b5b62
qemuxml2xmltest.c 32.1 KB