Libvirt provides a portable, long term stable C API for managing the virtualization technologies provided by many operating systems. It includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER Hypervisor.
Go to file
Laszlo Ersek 706b5b6277 qemu: map "virtio" video model to "virt" machtype correctly (arm/aarch64)
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: Marc-André Lureau <marcandre.lureau@redhat.com>
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1372901
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Martin Kletzander <mkletzan@redhat.com>
2016-09-16 14:13:07 +02:00
.gnulib@a2a39436b6 maint: update to latest gnulib 2016-08-18 13:36:39 +02:00
build-aux prohibit-duplicate-header: print file name and line 2016-06-23 12:48:40 +02:00
daemon virtlogd.socket: Tie lifecycle to libvirtd.service 2016-09-06 16:05:20 +02:00
docs audit: Audit information about shmem devices 2016-09-12 19:41:43 +02:00
examples Introduce node device update event as top level event 2016-08-15 08:30:56 -04:00
gnulib build: drop hack for old mingw ssize_t 2016-07-12 08:57:13 -06:00
include/libvirt api: add VIR_DOMAIN_UNDEFINE_KEEP_NVRAM flag 2016-09-13 09:31:50 +02:00
m4 virt-wireshark: Properly substract wireshark prefix 2016-07-27 17:01:18 +02:00
po Release of libvirt-2.2.0 2016-09-02 15:28:51 +02:00
src qemu: map "virtio" video model to "virt" machtype correctly (arm/aarch64) 2016-09-16 14:13:07 +02:00
tests qemu: map "virtio" video model to "virt" machtype correctly (arm/aarch64) 2016-09-16 14:13:07 +02:00
tools virsh: use virConnectGetDomainCapabilities with maxvcpus 2016-09-15 14:24:07 +02:00
.ctags maint: Make ctags work out of the box 2013-07-18 08:47:21 +02:00
.dir-locals.el build: avoid tabs that failed syntax-check 2012-09-06 09:43:46 -06:00
.gitignore tests: Self test virt-admin 2016-09-14 13:18:07 +02:00
.gitmodules make .gnulib a submodule 2009-07-08 16:17:51 +02:00
.mailmap maint: update .mailmap for recent contributions 2015-03-20 06:17:55 -06:00
AUTHORS.in Change maintainers list 2016-02-12 13:10:05 +03:00
autobuild.sh maint: Switch to xz compressed PAX release archives 2016-06-15 18:53:34 +02:00
autogen.sh maint: improve usage of autogen's --no-git 2015-02-06 11:35:29 -07:00
bootstrap maint: update to latest gnulib 2016-05-26 10:47:03 -06:00
bootstrap.conf hvsupport: use a regex instead of XML::XPath 2016-07-19 18:42:44 +02:00
cfg.mk cfg.mk: join not_streq and not_strneq tests 2016-08-18 13:37:08 +02:00
ChangeLog-old Fix typos in src/* 2014-04-21 16:49:08 -06:00
config-post.h gnulib: add getopt module 2016-07-10 15:39:44 -04:00
configure.ac configure: Check for major() more strictly 2016-09-13 18:09:55 +02:00
COPYING maint: follow recommended practice for using LGPL 2013-05-20 14:15:21 -06:00
COPYING.LESSER maint: Remove control characters from LGPL license file 2015-09-25 09:16:24 +02:00
HACKING docs: remove outdated suggestion to make patches with "diff -urp"/"git diff" 2016-07-01 12:41:10 -04:00
libvirt-admin.pc.in Add libvirt-admin library 2015-06-16 13:46:20 +02:00
libvirt-lxc.pc.in Add pkg-config files for libvirt-qemu & libvirt-lxc 2014-06-23 16:17:27 +01:00
libvirt-qemu.pc.in Add pkg-config files for libvirt-qemu & libvirt-lxc 2014-06-23 16:17:27 +01:00
libvirt.pc.in Add pkg-config files for libvirt-qemu & libvirt-lxc 2014-06-23 16:17:27 +01:00
libvirt.spec.in rpm: set TLS priority to @LIBVIRT,SYSTEM on Fedora >= 25 2016-08-04 15:59:24 +01:00
Makefile.am dist: Speed up distribution compression 2016-06-30 16:05:24 +02:00
Makefile.nonreentrant cfg.mk: use a single regex for all non-reentrant functions 2016-06-15 15:00:56 +02:00
mingw-libvirt.spec.in mingw-libvirt.spec.in: add perl + perl(Getopt::Long) BRs 2016-07-01 14:11:15 +01:00
README Correct typos in the documentation (Atsushi SAKAI) 2008-01-24 10:15:13 +00:00
README-hacking docs: update README-hacking 2014-05-06 16:20:24 -06:00
run.in Add PKG_CONFIG_PATH to run.in script. 2014-06-26 14:32:35 +01:00
TODO Update todo list file to point at bugzilla/website 2010-10-13 16:45:26 +01:00

         LibVirt : simple API for virtualization

  Libvirt is a C toolkit to interact with the virtualization capabilities
of recent versions of Linux (and other OSes). It is free software
available under the GNU Lesser General Public License. Virtualization of
the Linux Operating System means the ability to run multiple instances of
Operating Systems concurrently on a single hardware system where the basic
resources are driven by a Linux instance. The library aim at providing
long term stable C API initially for the Xen paravirtualization but
should be able to integrate other virtualization mechanisms if needed.

Daniel Veillard <veillard@redhat.com>