- 1 System emulation
- 1.1 Incompatible changes
- 1.2 New deprecated options and features
- 1.3 Alpha
- 1.4 68k
- 1.5 Arm
- 1.6 HPPA
- 1.7 Microblaze
- 1.8 MIPS
- 1.9 Nios2
- 1.10 OpenRISC
- 1.11 PowerPC
- 1.12 RISC-V
- 1.13 s390
- 1.14 SH
- 1.15 SPARC
- 1.16 TileGX
- 1.17 Tricore
- 1.18 x86
- 1.19 Xtensa
- 1.20 Device emulation and assignment
- 1.20.1 ACPI
- 1.20.2 Audio
- 1.20.3 Block devices
- 1.20.4 GPIO
- 1.20.5 Graphics
- 1.20.6 Input devices
- 1.20.7 IPMI
- 1.20.8 Network devices
- 1.20.9 NVDIMM
- 1.20.10 PCI/PCIe
- 1.20.11 SCSI
- 1.20.12 SMBIOS
- 1.20.13 TPM
- 1.20.14 USB
- 1.20.15 VFIO
- 1.20.16 virtio
- 1.20.17 Xen
- 1.20.18 fw_cfg
- 1.20.19 9pfs
- 1.20.20 Semihosting
- 1.21 Audio
- 1.22 Character devices
- 1.23 Crypto subsystem
- 1.24 GUI
- 1.25 Host support
- 1.26 Memory backends
- 1.27 Monitor
- 1.28 Migration
- 1.29 Network
- 1.30 Block device backends and tools
- 1.31 Tracing
- 1.32 Miscellaneous
- 2 User-mode emulation
- 3 TCG
- 4 Guest agent
- 5 Build Information
- 6 Known issues
- The minimum version of the glib library is now 2.48
- On s390x, using KVM now explicitly requires a host kernel version of at least 3.15 (which includes the 'flic' KVM device). This had been broken since QEMU 2.10 already.
New deprecated options and features
Consult the "Deprecated Features" appendix for the full list of historically deprecated features/options.
- Added new "next-cube" machine for emulating a classic NeXTcube (still incomplete, can only boot to the firmware prompt)
- Added Aspeed AST2600 SoC support
- QEMU's Arm semihosting implementation now supports v2.0 of the specification, including the "STDOUT_STDERR" and "EXIT_EXTENDED" extensions
- We now correctly support more than 256 CPUs when using KVM
- Fixed bug involving emulation of ST.W instruction in system mode only (there was no bug in Linux user mode).
- Behavior for unplug of multifunction PCI devices has been changed to match x86. Attempting to unplug any function will cause an unplug of the whole slot.
- There are now separate machine types for POWER8 based and POWER9 based non-virtualized machines (powernv8 & powernv9).
- Default RAM size for powernv machines has been increased to 1.75G which should allow more things to work with the default parameters.
- RTAS (runtime firmware) code is now supplied by SLOF (boot time firmware) instead of by qemu itself. This won't affect users in most cases, but will affect users of -bios which bypasses SLOF, which includes kvm-unit-tests. You'll need a sufficiently recent version of kvm-unit-tests to handle this.
- mffsce, mffscrn and mffscrni POWER9 instructions now supported in TCG
- powernv machine now includes models for the Homer and OCC SRAM system devices
- "info pic" HMP command now reports whether the irq chip is emulated in kernel or in qemu
- pseries machine type no longer permits NUMA nodes with no CPU and no memory - this was already unlikely to work due to problems expressing this configuration to the guest
- The `-initrd` argument is now supported.
- TCG now implements IEP (Instruction Execution Protection), a CPU feature introduced with the z14. Until the "qemu" CPU model is lifted to a z14, it can be enabled using the "max" CPU model ("-cpu max").
Device emulation and assignment
UUID handling for the built-in IPMI BMC has changed. Before the UUID was set from the qemu UUID, if that was set. However, in a real system, the UUID of a BMC will be independent of the system UUID. So now the UUID must be explicitly set for a BMC if you want one. Otherwise the BMC will not have a UUID.
To set the UUID of a BMC, use the new property
guid=11223344-5566-7788-99aa-bbccddeeff00 for the ipmi-bmc-sim device.
IPMI PCI Devices
New PCI interfaces for IPMI KCS and BT devices are available. The devices
pci-ipmi-bt are used to choose these devices.
- virtio-mmio now supports the virtio standard compatible v2 personality (still defaulting to the legacy v1 personality for compatibility reasons)
- the "local" backend now has a new 'multidevs' option to deal with cross-device setups (ie. when the shared directory spans over multiple devices on the host)
- Any backend that supports connection as an Inet client (NBD, chardev, network device, monitor...) can now request to use TCP keep-alive with the server.
- bugs in gdbstub handling of F and ! packets have been fixed
- The 'validate-uuid' migration compatibility checks the UUID matches on migration, preventing accidental migration of the wrong VM to the wrong destination. (Yury Kotov)
- The user mode host network backend now allows to set a guest-visible DNS address which is not in the virtual network, unless restrict mode is enabled.
Block device backends and tools
- Block drivers can now support BDRV_REQ_PREFETCH for more efficient handling of copy-on-read requests; the NBD driver has wired this up to NBD_CMD_CACHE.
- The LUKS block driver supports falloc/full preallocation.
- The NBD server now advertises NBD_FLAG_CAN_MULTI_CONN on shared readonly connections.
- The NBD server and client support the new NBD_CMD_FLAG_FAST_ZERO as an optimization during the copying of sparse images.
- The backup block job now creates a filter node, just like mirror and commit do. Clients that care about the structure of the block graph need to take this into account.
- Several assertion failures relating to the use of an NBD server with iothreads have been fixed.
- call0 ABI may be selected for the user emulation with command line option -xtensa-abi-call0 (or with QEMU_XTENSA_ABI_CALL0 environment variable).
- The tcg tests have had their configuration and build somewhat dissentagled from the main make file
- tcg tests are now in $BUILDDIR/tests/tcg/$TARGET/ (rather than $BUILDDIR/$TARGET/tests/)
- The minimum supported version of Python is now 3.5.
Container Based Builds
- The docker.py tooling now supports podman containers  as an alternative to docker
- the docker.py now requires python3 to run
- a number of the cross compiler containers have been updated to Buster
- The minimum version of the glib library is now 2.48
- see Planning/4.2