Revision as of 16:02, 24 August 2021 by Kevin (talk | contribs) (→‎Incompatible changes)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

System emulation

Incompatible changes

Consult the 'Removed features' page for details of suggested replacement functionality

  • The 'moxie' target has been removed without replacement. There were no known users of this CPU type anymore and no binaries available which could be used for testing.
  • The 'lm32' target has been removed without replacement. The only public user of this architecture was the milkymist project, which has been completely inactive for years, and there was never an upstream Linux port.
  • The 'unicore32' target has been removed without replacement. Support for this CPU was removed from the upstream Linux kernel a while ago already, and there is no available upstream toolchain to build binaries for it.
  • The 'sheepdog' driver has been removed. The corresponding upstream server project is no longer maintained. Users are recommended to switch to an alternative distributed block device driver such as RBD.
  • The "info cpustats" HMP command has been removed. It already didn't produce output.
  • When creating an image with a backing file, or changing the backing file of an existing image, qemu-img requires now that the backing file format is specified as well.

New deprecated options and features

Consult the "Deprecated Features" chapter of the QEMU System Emulation User's Guide for further details of the deprecations and their suggested replacements.

  • Using non-persistent backing file with pmem=on is now deprecated.
  • '-display sdl,window_close=...' should be replaced with '-display sdl,window-close=...' (i.e. with a minus instead of an underscore between “window” and “close”).
  • '-no-quit' is deprecated. '-display ...,window-close=off' should be used instead.
  • The Aspeed swift-bmc machine is deprecated and should be replaced by the witherspoon-bmc or the romulus-bmc machines.




  • New Aspeed machines: rainier-bmc, quanta-q7l1-bmc
  • New npcm7xx machine: quanta-gbs-bmc
  • New Cortex-M3 based machine: stm32vldiscovery
  • Model for Aspeed's Hash and Crypto Engine
  • The mps3-an524 board now supports the alternate memory map (via "-machine remap=QSPI")
  • SVE2 is now emulated, including bfloat16 support
  • FEAT_I8MM is now emulated (integer matrix multiply accumulate)
  • FEAT_TLBIOS is now emulated (TLB invalidate instructions in Outer Shareable domain)
  • FEAT_TLBRANGE is now emulated (TLB range invalidate instructions)
  • FEAT_BF16 and FEAT_AA32BF16 are now emulated (bfloat16 support for AArch64 and AArch32)
  • FEAT_MTE3 (MTE asymmetric fault handling) is now emulated
  • The qemu-aarch64 user-mode binary supports a new CPU property sve-default-vector-length that can be used to set the default SVE vector length, analogous to the kernel's /proc/sys/abi/sve_default_vector_length configuration knob









  • With recent enough guests now able to (sometimes) detect hot unplug failures on pseries machine type
  • Greatly increased maximum cpu count for pseries; it's now basically arbitrarily high - you will hit KVM or emulation limits before a fixed cut off
  • Implemented some POWER10 prefixed instructions in TCG
  • Optional support for the H_RPT_INVALIDATE hypercall on pseries machine
  • Experimental "Virtual Open Firmware" option for pseries (and Pegasos2) which implements most of the firmware behaviour inside qemu.
  • Updated ppce500 firmware image, which should fix pci support
  • Added 'pegasos2' machine type emulating the Genesi/bPlan Pegasos II board
  • 'mac99' machine now limited to 2GiB of RAM (previously it was allowed on the command line, although it probably wouldn't work properly)

Renesas RX

Renesas SH


  • Clenaup some left over v1.9 code
  • Documentation improvements
  • Support for the shakti_c machine
  • Internal cleanup of the CSR accesses
  • Updates to the OpenTitan platform
  • Add support for the OpenTitan timer
  • Support for the virtio-vga
  • Fix for the saturate subtract in vector extensions (
  • Experimental support for the ePMP spec
  • Initial support for the experimental Bit Manip extension
  • Update the PLIC and CLINT DT bindings
  • Improve documentation for RISC-V machines
  • Support direct kernel boot for microchip_pfsoc
  • Fix WFI exception behaviour
  • Improve CSR printing
  • Fix a GDB CSR bug
  • A range of other internal code cleanups and bug fixes


  • The s390-ccw bios can now be compiled with Clang, too
  • tcg now supports the vector-enhancements facility, and the 'qemu' cpu model has been bumped to a stripped-down z14 GA2
    • this should enable distributions built for the z14 to be run under tcg
  • cpu models for gen16 have been added




  • New CPU model versions added with XSAVES enabled: Skylake-Client-v4, Skylake-Server-v5, Cascadelake-Server-v5, Cooperlake-v2, Icelake-Client-v3, Icelake-Server-v5, Denverton-v3, Snowridge-v3, Dhyana-v2
  • hv-passthrough won't enable Hyper-V feature flags that are unknown to QEMU
  • New bus-lock-ratelimit machine option for rate limiting bus locks by guests
  • Intel-specific CPUID leaves are not going to be exposed to guests if the vendor ID of the virtual CPU is AMD
  • The fcs:fip and fds:fdp fields of the fstenv and fsave structures are correctly set.
  • Add ACPI based PCI hotplug support to Q35 machine. It is enabled and used by default since pc-q35-6.1 machine type.
  • Many fixes for the emulation of AMD virtualization extensions.
  • The NetBSD NVMM accelerator is now supported.


  • Fix for migration of the PKU state on AMD machine.


  • family/model/stepping of CPU models qemu64 (all accelerators) and max (TCG only) were updated to values corresponding to a 64-bit AMD processor (fixes #191)


Device emulation and assignment



Block devices



  • Modified the I2C base to allow I2C muxes to be added
  • Added support for the pca9546 and pca9548 I2C muxes.
  • Added support for PMBus and several PMBus devices.
  • Move sensor devices into a new sensor directory.
  • Remove the interfaces with the error-prone transfer direction and use the read/write functions instead.

Input devices


  • Fixed type of watchdog_expired so vmstate transfer works. Otherwise a vmstate transfer could end up with the wrong data for that field.

Multi-process QEMU

Network devices



Emulated NVMe Controller



SD card






  • virtio-mem now works with vfio




  • Reduce latency of Twalk request (directory tree traversal)
  • Fix potential information leak if mtime of export root directory changed (security impact in practice either none or low).




Character devices

Crypto subsystem

  • The preferred crypto backend driver now gnutls, with libgcrypt as the second choice, and nettle as third choice, with ordering driven mostly by performance of the ciphers.
  • Use of nettle is discouraged due to its poor performances and lack of FIPS support and may be removed in a future release.
  • The built-in fallback crypto backend no longer supports DES or AES-XTS. Use of gnutls/gcrypt backends are required instead.
  • The SASL configuration now recommends SCRAM-SHA-256 as the mechanism for simple password authentication
  • Documentation is provided outlining how to use the secret passing features

Authorization subsystem

  • Documentation is provided outlining how to use the authorization framework for access control


  • VNC password authentication is no longer supported unless building with an external crypto driver backend library (choice of gnutls, gcrypt or nettle).


TCG Plugins

  • some memory leaks plugged in example plugins
  • syscall plugin now summarise totals by default (so as not to duplicate -strace)
  • new execlog plugin
  • new cache modelling plugin
  • plugins are enabled by default on most TCG enabled builds
  • fixed bug in physical address calculation

Host support

Memory backends

  • New property "reserve" to map memory with the MAP_NORESERVE flag.
  • It is not necessary anymore to set the memory with "-m" when memory is configured with "-M memory-backend=ID".






Block device backends and tools

  • Fix a regression in qemu-nbd and qemu-storage-daemon handling file descriptors via socket activation.
  • The NBD client connection code has been refactored to operate as a background task, which in turn allows even better responsiveness in the retry code in dealing with a transient failure connection to a server.
  • qemu-img map --output=json now includes a "present":bool field to facilitate reconstructing which parts of a backing chain are actually present.
  • qemu-img convert --bitmaps now includes a --skip-broken-bitmaps option to let it succeed even when the source has inconsistent bitmaps, without requiring the deletion of those bitmaps in the source.
  • Creating a new image that uses an encrypted image as its backing file doesn't require providing the secret to qemu-img create any more
  • The QMP command blockdev-reopen was added and allows changing the options of block nodes after their creation



  • The qtest server can be created using "-object qtest,chardev=...,log=...". This is alternative to the -qtest and -qtest-log options.
  • The settings for the "-smp" option can be also passed to -M using a "smp." prefix, for example "-smp cpus=4" is now a synonym of "-M smp.cpus=4".

User-mode emulation




  • tricore now has check-tcg support and tests
  • hexagon now has check-tcg support and tests
  • fixed bug in replay HMP commands to accept full length icount
  • plugins enabled by default for most TCG enabled builds

Guest agent

Build Information

  • CentOS 7 is no longer a supported build platform


GIT submodules

Container Based Builds

  • improvements to binfmt_misc containers
  • most ci containers have been regenerated with lcitool

VM Based Builds

  • NetBSD version bumped to 9.2
  • OpenBSD version bumped to 6.9

Build Dependencies

  • gnutls is now the preferred crypto backend
  • minimum nettle is now 3.4
  • minimum libgcrypt is now 1.8.0
  • minimum gnutls is now 3.5.18
  • minimum glib is now 2.56
  • minimum gcc is now 7.5.0
  • minimum clang is now 6.0
  • minimum xcode clang is now 10.0
  • minimum libssh is now 0.8.7


Testing and CI

  • playbooks for configuring shared gitlab workers are now in scripts/ci/setup
  • travis and cirrus results now integrated into GitLab UI
  • now handles as/ld based tests outside of the container

Known issues