Revision as of 06:46, 10 June 2024 by Hrw (talk | contribs) (added note about SBSA-ref 1GHz timer frequency)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Release schedule: Planning/9.0.

System emulation

Removed features and incompatible changes

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

  • 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
  • The behaviour of the '-serial none' option when used together with other '-serial' options has been corrected. Previously when '-serial none' was followed by '-serial something' the '-serial none' was effectively ignored. Now it controls the existence of the first serial port, and the following '-serial' option controls the behaviour of the second serial port; this brings it in to line with how all other cases of multiple '-serial' options work. If you have a command line that was accidentally relying on the old behaviour, you can simply delete the unnecessary '-serial none'.

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 CRIS architecture has been marked deprecated
  • Arm boards akita, borzoi, cheetah, connex, mainstone, n800, n810, spitz, terrier, tosa, verdex, z2 have been deprecated


  • Fixed exception frame format for 68010
  • Add nubus-virtio-mmio device to allow the q800 machine to access virtio devices



  • Some board types modelling old Arm hardware using the PXA2xx and OMAP2 SoCs have been deprecated and are scheduled for removal in a future QEMU release: akita, borzoi, cheetah, connex, mainstone, n800, n810, spitz, terrier, tosa, verdex, z2. The code implementing these boards was very old and unmaintained, and we don't believe that any of them have a large number of users.
  • New architectural features now emulated:
    • FEAT_ECV (Enhanced Counter Virtualization)
    • FEAT_NV (Nested Virtualization)
    • FEAT_NV2 (Enhanced nested virtualization support)
  • New board types:
    • b-l475e-iot01a : the B-L475E-IOT01A board (currently minimal support only)
    • mps3-an536 : a Cortex-R52 board modelling the AN536 firmware image for the MPS3 development board
    • raspi4b : the Raspberry Pi 4 Model B. Note that QEMU does not yet model PCI or ethernet; we hope to implement those devices for the next QEMU release.
  • Changes to existing board types:
    • The Freescale i.MX6 now models the cache controller and the PCIe controller
    • The Allwinner R40 and Bananapi boards now model the USB controllers, the AHCI/SATA controller and the watchdog timer
    • Raspberry Pi boards now support the SPI controller and the BSC i2c controller
    • The npcm7xx based boards now support the ethernet controllers
    • SBSA Reference Platform uses 1GHz timer frequency. If you see time going too fast then update firmware.
    • The virt board now wires up non-secure EL2 virtual timer IRQ when EL2 emulation is enabled with 'virtualization=on'.

Note that when the virt board uses the non-secure EL2 virtual timer IRQ, this will trip a bug in older versions of the EDK2 guest firmware, which causes EDK2 to assert on bootup with "ASSERT [ArmTimerDxe] /home/kraxel/projects/qemu/roms/edk2/ArmVirtPkg/Library/ArmVirtTimerFdtClientLib/ArmVirtTimerFdtClientLib.c(72): PropSize == 36 || PropSize == 48". If you see that assertion you should do one of:

  • update your EDK2 binaries to edk2-stable202311 or newer
  • use the 'virt-8.2' versioned machine type
  • not use 'virtualization=on'




  • SeaBIOS-hppa version 16
  • SeaBIOS now provided as 64-bit and 32-bit binary
  • Fixed 32-bit HP-UX crashes on B160L (32-bit) machine
  • Fixed random SCSI slowdowns and script aborts on HP-UX 10.20, Linux and NetBSD
  • Fixed NetBSD boot failure due to power button in page zero
  • Fixed NetBSD FPU detection failure
  • Fixed NetBSD networking with tulip driver
  • Fixed OpenBSD 7.4 boot failure
  • Allows up to 3840 MB of memory (instead of 3.0 GB)
  • Supports the qemu --nodefaults option
  • Added qemu-specific opcodes for "HALT QEMU", "RESET QEMU" and "RESTORE SHR" (restore shadow registers).
  • Does not abort on access failure in Astro/Elroy registers


ISA and Extensions

  • Add loongarch kvm accel support
  • KVM: Enable LSX/LASX extension
  • Fix tlb huge page loading issue
  • Set vector registers call clobbered
  • Set cpuid CSR register only once with kvm mode


  • Change the UEFI loading mode to loongarch
  • Add dynamic cpu number support for loongarch_extioi
  • Fix qtest test-hmp error when KVM-only build
  • Fix qemu-system-loongarch64 assert failed with the option '-d int'
  • Fix interrupt routing update




  • A bug was fixed in nios2-linux-user that meant async work was being skipped



Renesas RX

Renesas SH

ISA and Extensions

  • Fix mac.w memory load operand size
  • Fix mac.w behavior in saturation arithmetic mode
  • Fix mac.l behavior in saturation arithmetic mode
  • Fix delay slot restrictions for PC-relative mov.w, mov.l, mova


ISA and Extensions

  • Add support for Zacas extension
  • Add amocas.[w,d,q] instructions
  • RVA22 profiles support
  • Add RVV CSRs to KVM
  • Add support for 'B' extension
  • Implement optional CSR mcontext of debug Sdtrig extension
  • Add support for Zaamo and Zalrsc
  • Enable xtheadsync under user mode
  • Add Ztso extension
  • Use 'zfa' instead of 'Zfa'
  • move ratified/frozen exts to non-experimental


  • ACPI: Enable AIA, PLIC and update RHCT
  • Fix the interrupts-extended property format of PLIC
  • Document acpi parameter of virt machine
  • Remove group setting of KVM AIA if the machine only has 1 socket
  • sifive_u: Update S-mode U-Boot image build instructions
  • Support vlenb and vregs[] in KVM
  • Support new isa extension detection devicetree properties
  • SMBIOS support for RISC-V virt machine
  • Add rv32i,rv32e and rv64e CPUs
  • Enable SPCR for SCPI virt machine
  • Add SRAT and SLIT ACPI tables
  • Update KVM exts to Linux 6.8

Fixes and Misc

  • Fix th.dcache.cval1 priviledge check
  • Don't allow write mstatus_vs without RVV
  • Fix machine IDs QOM getters
  • Fix KVM reg id sizes
  • Upgrade OpenSBI from v1.3.1 to v1.4
  • pmp: Ignore writes when RW=01 and MML=0
  • Don't adjust vscause for exceptions
  • Ensure mideleg is set correctly on reset
  • Check for 'A' extension on all atomic instructions
  • Allow large kernels to boot by moving the initrd further away in RAM
  • FIX xATP_MODE validation
  • Ensure mcountinhibit, mcounteren, scounteren, hcounteren are 32-bit
  • Fix vector shift count overflow
  • Fix setipnum_le write emulation for APLIC MSI-mode
  • Fix in_clrip[x] read emulation
  • Fix privilege mode of G-stage translation for debugging
  • Fix ACPI MCFG table for virt machine
  • A range of Vector fixes
  • Update APLIC IDC after claiming iforce register
  • Fix timebase-frequency when using KVM acceleration


  • Fix access register handling in the emulation of the LOAD ADDRESS EXTENDED (LAE) instruction
  • Add emulation of CVDG, CVB, CVBY and CVBG instructions


  • Fix ASI_USERTXT access which caused the Solaris kernel to panic when using mdb/gdb/adb within the guest



Xen emulation under KVM


Known issues


Device emulation and assignment



Block devices

  • The 'virtio-blk' device has gained true multiqueue support where different queues of a single disk can be processed by different I/O threads. This can improve scalability in cases where the guest submitted enough I/O to saturate the host CPU running a single I/O thread processing the virtio-blk requests. Multiple I/O threads can be configured using the new 'iothread-vq-mapping' property.
  • 'usb-storage' doesn't ignore the properties 'backend_defaults', 'logical_block_size', 'physical_block_size', 'min_io_size', 'opt_io_size' and 'discard_granularity' any more.
  • Fixed 'vhost-vdpa-device' to be compatible with VDUSE block exports again (this was broken in QEMU 8.2.0)




Input devices


Multi-process QEMU

Network devices





  • The ESP SCSI (am53c974/dc390) device has been substantially rewritten, fixing several long-standing bugs and making it easier to maintain in future.

SD card






  • Introduced an IOMMU interface backend for VFIO devices
  • Introduced a new IOMMUFD backend for ARM, x86_64 and s390x platforms
  • Better error reporting
  • Allowed cpr-reboot for VFIO devices
  • Misc fixes









Character devices

  • Fix potential crash if connection is dropped while the TLS handshake is still in progress
  • Fix I/O on TLS channels when chardev frontend is not ready to consume data
  • QEMU is more likely to process pending incoming data before processing EOF/HUP

Crypto subsystem

  • The 'sm4' cipher algorithm is now supported and can be used with the 'luks' block driver
  • The cipher test suite will automatically skip testing algorithms that have been disabled in the underlying OS crypto library at build time.

Authorization subsystem



  • the gdbstub now supports catching syscalls in user-mode
  • the gdbstub now supports fork-follow modes
  • the gsbstub now supports siginfo:read

TCG Plugins

  • vcpu_init callback will now always be in the vcpu context
  • A new API for accessing register values is now available (and used by execlog)
  • The inline API has been replaced with a thread safe scoreboard indexed by vcpu_index

Host support

Memory backends

  • Memory backends specified on the QEMU commandline can now be preallocated concurrently/asynchronously in some configurations, to speedup QEMU startup with preallocation on multiple memory backends: one requirement is that memory backends that are getting preallocated have a "thread-context" set.
  • QEMU 8.2 accidentally allowed for creation of memory backends with sizes that are not aligned to the (huge) page size. This has been fixed.


  • Fixed migration for SUSPENDED VM, where we used to ignore the SUSPENDED state and kick off the VM even if it was suspended before the migration.
  • New capability called "mapped-ram". It allows efficient VM snapshots save/load by providing both (1) constant size of ultimate VM image rather than unlimited, and (2) multi-threading support so that save/load of snapshots can be faster.
  • Zero page detection offloading for multifd, so that idle guest migration should get a major boost when multifd is enabled.
  • New parameter called "zero-page-detection", allow the user to choose the policy for detecting zero pages.
  • Enhancement to CPR-reboot mode, added VFIO supports (requires guest suspensions), new documents.
  • Fixed a rare postcopy hang with preempt mode since 8.2



  • Fixed a race condition where monitor commands could be executed unexpectedly in the middle of another operation and caused crashes



Block device backends and tools

  • The block layer is now thread safe and multiple I/O threads can send I/O requests to the same disk image. virtio-blk can be configured to make use of this and improve scalability (see above).
  • The 'luks' block driver now supports creation and usage of detached LUKS header files
  • The 'stream' and 'commit' block jobs have a new flag 'backing-mask-protocol'. If it is enabled and the base backing file uses a protocol driver (like 'file') directly, 'raw' is stored as the backing file format in the overlay instead of the protocol name.
  • In 'blklogwrites', potential log corruption bugs were fixed related to concurrent requests and to write zeroes operations
  • Fixed I/O errors in the libblkio based block drivers caused by incorrect memory alignment of bounce buffers
  • Fixed deadlocks that could hang the whole QEMU process in the mirror block job and the NBD export




  • During startup QEMU system emulators will raise the max file descriptors soft limit to match the hard limit
  • Seccomp filters will now return EPERM rather than killing QEMU if code attempts to spawn a child process. Fixes compatibility with some NVIDIA libraries which try to run modprobe.
  • Thread-local coroutine pools have been mostly replaced by a global pool, which reduces the number of inactive coroutines (and therefore memory mappings) and is limited to a maximum size depending on vm.max_map_count on Linux. This fixes the "failed to set up stack guard page" error that has been reported on Linux hosts where the QEMU coroutine pool exceeded the vm.max_map_count limit.

User-mode emulation











  • fixed record/replay to avoid problems with partial chardev drains
  • updated for current ABI


Guest agent

  • Fix build on Solaris
  • Improve help for --allow-rpcs and --block-rpcs command line options
  • Fix guest-get-fsinfo when a volume has more than one disk (Windows only)
  • Add support of Windows Server 2025 in guest-get-osinfo command (Windows only)

Build Information

Build Dependencies

Build hardening

  • QEMU build will include '-fzero-call-used-regs' to attempt to reduce exploitable ROP gadgets
  • QEMU build will include '-ftrivial-auto-var-init=zero' to reduce the chance of uninitialized stack variables causing security issues


  • 32-bit Windows is no longer supported as a host OS; use a 64-bit Windows host instead.

Testing and CI

  • The timeout for TCG tests was raised to 120s (for the benefit of TCI)
  • The OpenBSD VM was updated to 7.4

Known issues