ChangeLog/9.0: Difference between revisions
(→RISC-V) |
(added note about SBSA-ref 1GHz timer frequency) |
||
(58 intermediate revisions by 16 users not shown) | |||
Line 1: | Line 1: | ||
Release schedule: [[Planning/9.0]]. | |||
== System emulation == | == System emulation == | ||
Line 6: | Line 8: | ||
* 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 qemu-devel@nongnu.org. | * 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 qemu-devel@nongnu.org. | ||
* 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 === | === New deprecated options and features === | ||
Consult the [https://qemu-project.gitlab.io/qemu/about/deprecated.html "Deprecated Features"] chapter of the QEMU System Emulation User's Guide for further details of the deprecations and their suggested replacements. | Consult the [https://qemu-project.gitlab.io/qemu/about/deprecated.html "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 | |||
=== 68k === | === 68k === | ||
* Fixed exception frame format for 68010 | |||
* Add nubus-virtio-mmio device to allow the q800 machine to access virtio devices | |||
=== Alpha === | === Alpha === | ||
=== Arm === | === Arm === | ||
* 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: | * New architectural features now emulated: | ||
** FEAT_NV | ** FEAT_ECV (Enhanced Counter Virtualization) | ||
** FEAT_NV2 | ** FEAT_NV (Nested Virtualization) | ||
** FEAT_NV2 (Enhanced nested virtualization support) | |||
* New board types: | * New board types: | ||
** b-l475e-iot01a : the B-L475E-IOT01A board (currently minimal support only) | ** 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. | |||
* The Freescale i.MX6 now models the cache controller | * 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' | |||
=== AVR === | === AVR === | ||
Line 31: | Line 57: | ||
=== HPPA === | === HPPA === | ||
* SeaBIOS-hppa version | * 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 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 boot failure due to power button in page zero | ||
* Fixed NetBSD FPU detection failure | * Fixed NetBSD FPU detection failure | ||
* Fixed NetBSD networking with tulip driver | |||
* Fixed OpenBSD 7.4 boot failure | * Fixed OpenBSD 7.4 boot failure | ||
* Allows | * Allows up to 3840 MB of memory (instead of 3.0 GB) | ||
* Supports the qemu ''--nodefaults'' option | * 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 | |||
=== LoongArch === | === LoongArch === | ||
==== ISA and Extensions ==== | ==== 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 | |||
==== Machines ==== | ==== Machines ==== | ||
* 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 | |||
=== Microblaze === | === Microblaze === | ||
Line 50: | Line 91: | ||
=== Nios2 === | === Nios2 === | ||
* A bug was fixed in nios2-linux-user that meant async work was being skipped | |||
=== OpenRISC === | === OpenRISC === | ||
Line 58: | Line 100: | ||
=== Renesas SH === | === 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 | |||
=== RISC-V === | === RISC-V === | ||
Line 66: | Line 115: | ||
* RVA22 profiles support | * RVA22 profiles support | ||
* Add RVV CSRs to KVM | * 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 | |||
==== Machines ==== | ==== Machines ==== | ||
Line 73: | Line 129: | ||
* Remove group setting of KVM AIA if the machine only has 1 socket | * Remove group setting of KVM AIA if the machine only has 1 socket | ||
* sifive_u: Update S-mode U-Boot image build instructions | * 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 ==== | ==== Fixes and Misc ==== | ||
Line 83: | Line 146: | ||
* Don't adjust vscause for exceptions | * Don't adjust vscause for exceptions | ||
* Ensure mideleg is set correctly on reset | * 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 | |||
=== s390x === | === s390x === | ||
* Fix access register handling in the emulation of the LOAD ADDRESS EXTENDED (LAE) instruction | * Fix access register handling in the emulation of the LOAD ADDRESS EXTENDED (LAE) instruction | ||
* Add emulation of CVDG, CVB, CVBY and CVBG instructions | |||
=== SPARC === | === SPARC === | ||
* Fix ASI_USERTXT access which caused the Solaris kernel to panic when using mdb/gdb/adb within the guest | |||
=== Tricore === | === Tricore === | ||
Line 109: | Line 187: | ||
==== Block devices ==== | ==== 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) | |||
==== Graphics ==== | ==== Graphics ==== | ||
Line 131: | Line 213: | ||
==== SCSI ==== | ==== SCSI ==== | ||
* 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 ==== | ==== SD card ==== | ||
Line 143: | Line 227: | ||
==== VFIO ==== | ==== VFIO ==== | ||
* 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 | |||
==== virtio ==== | ==== virtio ==== | ||
Line 161: | Line 250: | ||
=== Character devices === | === 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 === | === 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 === | === Authorization subsystem === | ||
Line 169: | Line 265: | ||
=== GDBStub === | === GDBStub === | ||
* the gdbstub now supports catching syscalls in user-mode | |||
* the gdbstub now supports fork-follow modes | |||
* the gsbstub now supports siginfo:read | |||
=== TCG Plugins === | === 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 === | === Host support === | ||
=== Memory backends === | === 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. | |||
=== Migration === | === Migration === | ||
* 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. | * 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 | |||
=== Monitor === | === Monitor === | ||
==== QMP ==== | ==== QMP ==== | ||
* Fixed a race condition where monitor commands could be executed unexpectedly in the middle of another operation and caused crashes | |||
==== HMP ==== | ==== HMP ==== | ||
Line 189: | Line 301: | ||
=== Block device backends and tools === | === 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 | |||
=== Tracing === | === Tracing === | ||
Line 195: | Line 314: | ||
=== Miscellaneous === | === Miscellaneous === | ||
* 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 == | == User-mode emulation == | ||
Line 224: | Line 347: | ||
== Guest agent == | == 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 Information == | ||
Line 229: | Line 357: | ||
=== Build Dependencies === | === 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 | |||
=== Windows === | === Windows === | ||
* 32-bit Windows is no longer supported as a host OS; use a 64-bit Windows host instead. | |||
=== Testing and CI === | === 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 == | == Known issues == | ||
* See https://gitlab.com/qemu-project/qemu/-/milestones/11 | * See https://gitlab.com/qemu-project/qemu/-/milestones/11 |
Latest revision as of 06:46, 10 June 2024
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 qemu-devel@nongnu.org.
- 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
68k
- Fixed exception frame format for 68010
- Add nubus-virtio-mmio device to allow the q800 machine to access virtio devices
Alpha
Arm
- 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'
AVR
Hexagon
HPPA
- 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
LoongArch
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
Machines
- 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
Microblaze
MIPS
Nios2
- A bug was fixed in nios2-linux-user that meant async work was being skipped
OpenRISC
PowerPC
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
RISC-V
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
Machines
- 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
s390x
- Fix access register handling in the emulation of the LOAD ADDRESS EXTENDED (LAE) instruction
- Add emulation of CVDG, CVB, CVBY and CVBG instructions
SPARC
- Fix ASI_USERTXT access which caused the Solaris kernel to panic when using mdb/gdb/adb within the guest
Tricore
x86
Xen emulation under KVM
TCG
Known issues
Xtensa
Device emulation and assignment
ACPI / SMBIOS
Audio
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)
Graphics
Hyper-V
I2C
Input devices
IPMI
Multi-process QEMU
Network devices
NVDIMM
NVMe
PCI/PCIe
SCSI
- 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
SMBIOS
TPM
UFS
USB
VFIO
- 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
virtio
vDPA
Xen
fw_cfg
9pfs
virtiofs
Semihosting
Audio
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
GUI
GDBStub
- 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.
Migration
- 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
Monitor
QMP
- Fixed a race condition where monitor commands could be executed unexpectedly in the middle of another operation and caused crashes
HMP
Network
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
Tracing
Semihosting
Miscellaneous
- 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
runtime
binfmt_misc
alpha
arm/arm64/aarch64
LoongArch
HPPA
s390
x86
TCG
Record/Replay
- fixed record/replay to avoid problems with partial chardev drains
- updated replay-dump.py for current ABI
RISC-V
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
Windows
- 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