Revision as of 13:57, 18 December 2023 by Kostyanf14 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

System emulation

Removed features and incompatible changes

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

  • The HAX accelerator is not supported anymore; the project has been retired. Use "whpx" or "hvf" respectively on Windows and macOS.
  • The old machine types pc-i440fx-1.4 to pc-i440fx-1.7 have been removed; use a newer machine type instead
  • In addition to -audiodev and -audio, QEMU does not create default audio backends anymore if the -nodefaults option are used on the command line.
  • If an audio backend is created with -audiodev, each audio client (a sound card or VNC) that wants to use it has to specify an audiodev= property. Previously, the first audiodev command line option would be used as a fallback. However -audio can now be used to configure one or more default audio backends, in lieu of the (deprecated and now removed) QEMU_AUDIO_* environment variables.
  • Running QEMU with KVM requires Linux 4.4 or newer. A future version of QEMU will increase the minimum requirement for Arm hosts to Linux 4.19 (also when running KVM); if this is too restrictive for your use case, please contact us at

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.


  • The Macintosh Quadra 800 (q800) emulation now can boot:
    • MacOS 7.1 - 8.1, with or without virtual memory enabled
    • A/UX 3.0.1
    • NetBSD 9.3
    • Linux (via EMILE)



  • The following machines support the new audiodev property: integratorcp, musicpal, n800, n810, realview-eb, realview-eb-mpcore, realview-pb-a8, realview-pbx-a9, akita, borzoi, spitz, terrier, versatilepb, versatileab, vexpress-a9, vexpress-a15, xlnx-zcu102 z2
  • Xilinx Versal board now models the CFU/CFI
  • Xilinx Versal board now models the TRNG device
  • New CPU types:
    • cortex-a710
    • neoverse-n2
  • New architectural features now emulated:
    • FEAT_Pauth2
    • FEAT_HBC
    • FEAT_HPMN0
  • The SMMUv3 now advertises the SMMUv3.1-XNX feature




  • New 64-bit PA-RISC 2.0 CPU emulation, enable with "-cpu hppa64" and "-cpu hppa" for 32-bit CPU (default)
  • New HP C3700 machine emulation, includes an emulated Astro memory controller and four Elroy PCI bridges
  • Start 64-bit machine with "-machine C3700" and 32-bit CPU with "-machine B160L"
  • Improved TLB performance
  • Block-TLB (BTLB) support for 32-bit PA-RISC CPUs
  • New SeaBIOS-hppa version 12 to support HP C3000 with Astro & Elroy


ISA and Extensions

  • Implement LASX extension
  • Implement PRELDX instruction
  • Allow user enable/disable LSX/LASX features
  • Add avail_XXX functions to check XXX instruction
  • Fix ASXE flag conflict


  • Support LoongArch32 cpu la132
  • Support cpu model 'max'
  • Support 4K page size
  • Implement query-cpu-model-expansion
  • Remove unused 'loongarch_virt_pm' region
  • Remove unused ISA Bus
  • Remove unused ISA UART



  • The fuloong2e machine supports the new audiodev property.


  • signal tests disabled due to bitrot



  • The pegasos2 and 40p machines support the new audiodev property.

Renesas RX

Renesas SH


ISA and Extensions

  • Add zmmul isa string
  • Add smepmp isa string
  • Add RISC-V vector cryptographic instruction set support
  • Implement WARL behaviour for mcountinhibit/mcounteren
  • Add Zihintntl extension ISA string to DTS
  • Fix zfa fleq.d and fltq.d
  • Add RISC-V KVM AIA Support
  • Fix riscv,pmu DT node path in the virt machine
  • Update CSR bits name for svadu extension
  • Mark zicond non-experimental
  • Align the AIA model to v1.0 ratified spec
  • Use env_archcpu for better performance
  • Rename ext_icboz to ext_zicboz
  • Rename ext_icbom to ext_zicbom
  • Rename ext_icsr to ext_zicsr
  • Rename ext_ifencei to ext_zifencei
  • Add RISC-V Virtual IRQs and IRQ filtering support
  • Rename epmp to smepmp and expose the extension
  • Support zicntr/zihpm flags and disable support
  • Update RISC-V vector crypto to ratified v1.0.0
  • Support discontinuous PMU counters


  • Remove 'host' CPU from TCG
  • riscv_htif Fixup printing on big endian hosts
  • Add support for the max CPU
  • Detect user choice in TCG
  • Remove RVG warning
  • Change default linux-user cpu to 'max'
  • Update 'virt' machine core limit
  • Add query-cpu-model-expansion API

Fixes and Misc

  • Fix page_check_range use in fault-only-first
  • Fix upper/lower mtime write calculation
  • Make rtc variable names consistent
  • Use abi type for linux-user target_ucontext
  • Fix satp_mode_finalize() when satp_mode.supported = 0
  • Fix non-KVM --enable-debug build
  • Add new extensions to hwprobe
  • Use accelerated helper for AES64KS1I
  • Allocate itrigger timers only once
  • Respect mseccfg.RLB for pmpaddrX changes
  • Don't read the CSR in riscv_csrrw_do64
  • Clear CSR values at reset and sync MPSTATE with host
  • Fix the typo of inverted order of pmpaddr13 and pmpaddr14
  • Replace GDB exit calls with proper shutdown
  • Support KVM_GET_REG_LIST
  • Deprecate capital 'Z' CPU properties
  • Fix vfwmaccbf16.vf
  • Clear pmp/smepmp bits on reset
  • Ignore pmp writes when RW=01
  • Correct CSR_MSECCFG operations
  • Clear the Ibex/OpenTitan SPI interrupts even if disabled
  • Set the OpenTitan priv to 1.12.0
  • Add Zicboz block size to hwprobe
  • Create the virt machine FDT before machine init is complete
  • Don't verify ISA compatibility for zicntr and zihpm
  • Fix SiFive E CLINT clock frequency
  • Fix invalid exception on MMU translation stage
  • Fix mxr bit behavior


  • Emulated VFMIN and VFMAX instructions now correctly raise a specification exceptions when bits 1-3 of M5 are set
  • Fixed emulated VSTL instruction with a large length
  • Fixed emulated VREP instruction to use a 16-bit immediate
  • Fixed the "ignored match" case in the emulated VSTRS instruction
  • Enable crypto adapter passthrough (vfio-ap) for protected virtualization guests
  • Support s390x CPU topology (books and drawers, STSI 15.1.x instruction, PTF instruction) with KVM


  • Convert instruction translator to use decodetree


  • Added TC37x CPU that implements ISA v1.6.2
  • Added CRCN, FTOU, FTOHP, and HPTOF instructions
  • Fixed RCPW/RRPW_INSERT instructions for width=0
  • Fixed RCRR_INSERT using the wrong destination register
  • Fixed FTOUZ being only available from ISA v1.3.1 upwards


Xen emulation under KVM

  • Support PV console and network devices.
  • Bug fixes to support running Xen PV guests under "shim", documented in the "Xen HVM guest support" page.
  • Simplify command line for block and network devices.


  • Support for SHA instructions.

Known issues


Device emulation and assignment



  • Added virtio-sound device which implements capture and playback from inside a guest using the configured audio backend of the host machine. It is documented in the "Device Emulation / virtio sound" page.

Block devices

  • Parallels Format Driver
    • Improved 'qemu-img check' facility
      • Recover from broken data_off in the header
      • Drop clusters outside of the image file
      • De-duplicate clusters located on the same offset in the host file
    • Introduced ability to execute check automatically (if disk image is opened in read/write mode) if corruption is detected by open
    • Cluster allocation is now based on the cluster used bitmap (clusters could be allocated in holes inside image file)
    • Minimal DISCARD & WRITE_ZEROES support


  • New virtio-gpu rutabaga device. It allows various abstractions of GPU and display virtualization, coming from the Android/CrosVM graphical stack Rutabaga doc. This should help Android Emulator use upstream QEMU, and offers alternative solutions (or context types) than virgl.
  • ati-vga pixman-less support and fixes
  • virtio-gpu blob=true VM can now be migrated


  • New Hyper-V Dynamic Memory protocol device hv-balloon. This driver is like virtio-balloon on steroids for Windows guests: it allows both changing the guest memory allocation via ballooning and inserting pieces of extra RAM into it on demand from a provided memory backend via Windows-native Dynamic Memory protocol.


Input devices


Multi-process QEMU

Network devices




  • Added Astro Memory controller with Elroy PCI host busses for PA-RISC (hppa) machines


SD card




  • Support for UFS emulation through the new ufs, ufs-lu devices based on spec version v3.1
  • Support for multiple logical units through the ufs-lu  device
  • Support for UFS initialisation
  • Support for SCSI commands including read/write.
  • Support for query request commands
  • Typical usage:
-drive file=<file>,if=none,id=<drive_id>
-device ufs,serial=<serial>,id=<bus_name>, nutrs=<N[optional]>,nutmrs=<N[optional]>
-device ufs-lu,drive=<drive_id>,bus=<bus_name>



  • P2P support for VFIO migration
  • Removal of NVIDIA V100 GPU with NVLink2 support (PPC)
  • Dynamic MSI-X allocation support
  • ramfb migration support
  • Support for non 64b IOVA space
  • Preparatory changes for new IOMMUFD backend


  • virtio-mem now supports to dynamically consume multiple memslots instead of statically a single big one. The feature can be enabled using "dynamic-memslots=on", which can severely reduce KVM memory slot metadata overhead with large virtio-mem devices that only expose a small amount of memory to the VM. Note that the feature is incompatible with vhost devices that provide less than 509 memslots, like most vhost-user devices.
  • Added virtio-sound device. See Audio section/virtio-sound



  • Support PV unplug for AHCI disks with the q35 platform.
  • Allow creation of PV console devices from the command line.
  • Allow creation of PV network devices, including '-nic xxx,model=xen-net-device' and the default NIC.
  • Support '-drive file=FILENAME,if=xen' for creating PV block devices with automatic names.






Character devices

Crypto subsystem

Authorization subsystem


  • cocoa: add zoom-to-fit display option
  • gtk: various minor fixes


  • fixes cases where wrong threads were reported to gdb

TCG Plugins

  • fix bug in reporting too many instructions to qemu_plugin_tb_n_insns()
  • fix locking on execlog
  • windows support

Host support

Memory backends

  • memory-backend-file now supports the "rom" parameter. "share=off,readonly=off,rom=on" can be used for VM-templating with R/O files: open the file R/O, but create writable RAM instead of Read Only Memory (ROM).
  • "VM templating" documentation was added


  • Legacy compression migration is deprecated ("compress" as capability, "compress-level", "compress-threads", "compress-wait-thread", "decompress-threads" as parameters). Suggest to use multifd compression instead.
  • Block migration is deprecated. QMP command "migrate" parameters "blk" and "inc" are deprecated. Suggest to use driver-mirror with NBD instead.
  • Fixed race conditions for postcopy migration when preempt mode is enabled.
  • Postcopy recovery now allows network failure to happen even during RECOVER phase.
  • Added migration parameter "avail-switchover-bandwidth" migration parameter, can be used when the user observes extremely slow bandwidth during migration, causing migration to never complete.
  • Initial part of migration mode "cpr-reboot" integrated.





Block device backends and tools

  • The qemu NBD implementation for both server and client now supports the recent NBD protocol extension of 64-bit extended headers. When both sides of an NBD connection support this extension, commands like write zeroes or block status can operate on 64-bit effect lengths, rather than being capped to transaction sizes smaller than 4G.




  • Allow dump-guest-memory to output standard kdump format

User-mode emulation


Since this release, qemu linux-user implements and provides vdso for most popular architectures.



  • Emulated /proc/cpuinfo output in linux-user


  • Emulated /proc/cpuinfo output in linux-user


  • Support LASX/LSA sigcontext save and restore




TCG backends


Guest agent

  • Updated docs about `guest-exec` command results
  • Fixed memory leak in `guest-exec`

Build Information

  • Coding style has been updated to allow loop variables
  • It is possible to build a non-relocatable binary of QEMU with the configure option --disable-relocatable. The default remains a relocatable install (that is, all the directories within the install prefix are computed based on the path to the executable).

Build Dependencies

  • Building QEMU now requires Python 3.8. As a consequence, building on Debian 10 is not supported anymore (unless a newer version of Python is installed by other means).
  • Building QEMU now uses the tomli library if Python is older than version 3.11. However, version 2.0.1 is bundled in case tomli is not installed on the host.
  • The libfdt library is no longer bundled with QEMU. However, if QEMU is configured with --enable-download and the library is absent, then it will be downloaded and built together if any emulators need it.
  • The Pixman library is no longer strictly required. The VC, VNC, Gtk, Spice, screendump features and a few devices still require it.
  • When running make check-avocado, the Avocado testing framework and pycdlib must be present if the build tree was configured with --disable-download. Until 8.1, Avocado was always downloaded from PyPI.

Docker Tweaks

  • debian-i686 replaces fedora-i386 for 32 bit x86 cross builds
  • debian-am64 and debian-native merged into a common debian container built from lcitool for latest deps


Testing and CI

  • ccache has been enabled for CI builds
  • container backend is now selected by configure script

Known issues