System emulation

Command-line compatibility

  • Behavior when the three SMP topology options (socket, cores, threads) are specified but don't match the number of VCPUs was changed. In previous versions QEMU silently adjusted the "threads" option to (try to) make the topology match the number of VCPUs, now QEMU will abort when sockets*cores*threads don't match the number of VCPUs.

Future incompatible changes

  • Three options are using different names on the command line and in configuration file. In particular:
    • The "acpi" configuration file section matches command-line option "acpitable";
    • The "boot-opts" configuration file section matches command-line option "boot";
    • The "smp-opts" configuration file section matches command-line option "smp".
-readconfig will standardize on the name for the command line option.
  • Behavior of automatic calculation of SMP topology when some SMP topology options for -smp are omitted (sockets, cores, threads) will change in the future. If guest ABI needs to be preserved on upgrades while using the SMP topology options, users should either set set all options explicitly (sockets, cores, threads), or omit all of them.
  • Image encryption is fatally flawed, and will be dropped entirely. It'll remain available only in qemu-img, so you can use 'qemu-img convert' to convert encrypted images to uncrypted ones.
  • Host floppy device pass-through (block driver "host_floppy") is deprecated, and will be dropped in a future release.
  • Block device parameter aio=native has no effect without It will be made an error.
  • A few devices will be configured with explicit properties instead of implicitly. Unlikely to affect users.
    • Device "allwinner-a10" will get its networking configuration from properties "mac", "vlan", "netdev" instead of the first -net nic.
    • Devices "160s33b", "320s33b", "640s33b", "at25df041a", "at25df321a", "at25df641", "at25fs010", "at25fs040", "at26df081a", "at26df161a", "at26df321", "at26f004", "at45db081d", "en25f32", "en25p32", "en25p64", "en25q32b", "en25q64", "gd25q32", "gd25q64", "m25p05", "m25p10", "m25p128", "m25p16", "m25p20", "m25p32", "m25p40", "m25p64", "m25p80", "m25pe16", "m25pe20", "m25pe80", "m25px32", "m25px32-s0", "m25px32-s1", "m25px64", "m45pe10", "m45pe16", "m45pe80", "mx25l12805d", "mx25l12855e", "mx25l1606e", "mx25l2005a", "mx25l25635e", "mx25l25655e", "mx25l3205d", "mx25l4005a", "mx25l6405d", "mx25l8005", "n25q032", "n25q032a11", "n25q032a13", "n25q064", "n25q064a11", "n25q064a13", "n25q128", "n25q128a11", "n25q128a13", "n25q256a11", "n25q256a13", "s25fl016k", "s25fl064k", "s25fl129p0", "s25fl129p1", "s25fl256s0", "s25fl256s1", "s25fl512s", "s25sl004a", "s25sl008a", "s25sl016a", "s25sl032a", "s25sl032p", "s25sl064a", "s25sl064p", "s25sl12800", "s25sl12801", "s70fl01gs", "sst25vf016b", "sst25vf032b", "sst25vf040b", "sst25vf080b", "sst25wf010", "sst25wf020", "sst25wf040", "sst25wf512", "w25q256", "w25q32", "w25q32dw", "w25q64", "w25q80", "w25q80bl", "w25x10", "w25x16", "w25x20", "w25x32", "w25x40", "w25x64", "w25x80" will connect to a backend explicitly named by a property instead of an implicit -drive if=mtd.
    • Device "pc87312" will connect to backends explicitly named by properties instead of the first -parallel, the first three -serial, and -drive if=floppy,index={0,1}
    • Device "ssi-sd" will connect to a backend explicitly named by a property instead of an implicit -drive if=sd.
  • QMP command blockdev-add is still a work in progress. It doesn't support all block drivers, it lacks a matching blockdev-del, and more. It might change incompatibly.


  • When semihosting mode is active, the exit code is passed to the operating system.
  • New option -semihosting-config that supersedes -semihosting. A new suboption target=native forces QEMU to execute semihosting operations even when running under GDB. This helps for targets that do not implement semihosting calls in GDB.
  • The virt board now has a fw_cfg device. It allows use of the boot order options, as well as supporting -kernel/-initrd/-append even when you're using a firmware (-bios/-pflash) and not booting directly to the kernel.
  • The virt board now has a generic PCIe host bridge that uses the pci-host-ecam-generic driver in Linux.
  • Crypto instructions work on big-endian hosts too.
  • Support for emulation of the Netduino 2 boards.
  • The integratorcp board implements CARDIN and WPROT signals correctly so MMC card emulation should work better.


  • The virt board supports 32-bit guests on 64-bit hosts


  • Support for 5KEc and 5KEf MIPS64r2 processors.
  • Support for M14K and M14Kc MIPS32r2 microMIPS processors.
  • qemu-mips64 uses the 5KEf processor.
  • Many fixes.


  • Pseudo-support for transactional memory extensions; the transaction will fail immediately, but no illegal instruction exception will be generated. This is valid behavior, though of course suboptimal.
  • ioeventfd (including vhost, dataplane, etc.) works for ppc64le hosts.

IBM (pSeries)

  • Support for switching VGA endianness at run time (for ppc64le guest support)
  • The PAPR RTC interface supports the RTC_CHANGE event, the -rtc command line option and the date QOM property.
  • Support for EEH RTAS calls.

Freescale (BookE)


  • Improved support for m48t59 NVRAM.


  • PCI bus support (requires KVM).
  • Improvements to TCG support (can run GMP in the guest).
  • Support for reipl (reboot) from different disks for the virtio-ccw machine
    • Note that the bios is now mandatory for virtio-ccw machines!
  • Various fixes and improvements regarding memory accesses
  • Support for autodetection of DASD geometry.
  • The ccw bios is now relocateable, allowing e.g. for bigger ramdisks.
  • Handling of slow SIGP (signal processor) functions has been moved to qemu from kvm.


  • Improved support for m48t59 NVRAM (sun4u)
  • Fix Solaris 9 single user mode boot under OpenBIOS (sun4m)
  • Fix Solaris reboot panic under OpenBIOS (sun4m)


  • More complete emulation


  • New CPU model IvyBridge.
  • Consistent with the latest Intel microcode, RTM and HLE have been disabled on the Haswell and Broadwell CPU models. (will be reverted before release)
  • Support for defining maximum memory speed in "-smbios type=17" command-line options.
  • Reduced dependency on IASL by replacing pre-compiled binary SSDT patching with dynamic SSDT generation with help of new AML API.


  • Support for running under valgrind with KVM enabled.
  • Support for the XSAVES feature. The feature is not yet available in any predefined CPU model, but can be enabled with "-cpu host" or "-cpu ...,+xsaves".
  • kvm_stat now supports AArch64.
  • kvm_stat output is prettier.
  • KVM can now be used when QEMU is compiled as an x32 binary. The 4G address width limits the size of the guests that can be run, however.


  • Support for the ioreq-server API.

Device emulation and assignment


  • New properties disable_s3, disable_s4 for the ICH9-LPC devices. These properties (used through the -global command-line option) allow disabling S3 and S4 for the Q35 chipset.


  • Small improvements to the SoundBlaster 16 emulation (which, however, is still very buggy). Some Epic games now work with the "SoundBlaster Clone" setting.


  • Support for migration of VMs with stopped I/O requests for the ISA IDE controller.


  • vhost-scsi supports the bootindex property.


  • Improved support.


  • Support for device request notification allowing Linux kernel 4.0+ to notify QEMU and generate an automatic device hot-unplug request when unbinding devices from the host vfio-pci driver.
  • Update to VFIO type1 v2 IOMMU interface.
  • Code split in preparation for VFIO platform device support.
  • Debug conversion to tracepoint support and runtime support for disabling device MMAP.


  • The standard VGA (PCI id 1234:1111) is now available on all targets that support PCI; it was missing for example on ARM and SH.

Character devices

  • Improved emulation fidelity for serial ports (8250/16550).


  • VNC support for multiseat.
  • New query-vnc-servers QMP command, providing more information over query-vnc.
  • SPICE now supports Unix sockets (AF_LOCAL).
  • QEMU (with GTK+, SDL, SPICE, VNC interfaces) directly uses framebuffer data from the guest RAM for most pixel formats. This reduces CPU usage.
  • VNC websockets fixes? (expand/correct)


  • Improvements to hotplug error messages.
  • New "human" monitor commands "qom-list", "qom-set", "info qom-tree".


  • "-incoming defer" can be used to start QEMU in incoming-migration mode, but without actually setting up the connection to the source machine. This makes it possible to set migration capabilities that may affect the incoming connection process.
  • A new "migrate_incoming" command can be used to start an incoming migration after "-incoming defer" was passed on the command line.
  • Commands "info migration" ("human" monitor) and "query-migration" (QMP) now return the "cancelling" state explicitly. Previously, the "cancelling" state was reported as "active". Note that the cancelling state lasts for a fraction of a second and is probably changed to "cancelled" by the time QEMU receives the "info migration", so the effect is mostly theoretical.
  • A JSON description of the migration schema is included, as a debugging aid, at the end of the migration stream.

Block devices in system emulation

  • QEMU will restrict writes to the first sector when an image is autodetected as a raw image, so that the next time the VM is started it will not be autodetected e.g. as qcow2. To avoid this restriction, start QEMU with an explicit "format=raw" option.
  • virtio-blk SCSI requests (SG_IO) are now handled asynchronously.
  • Support for merging reads in virtio-blk.
  • New monitor command blockdev-backup.

Block devices and tools

  • qcow2 images (compat level 1.1) can now be created and used with a different reference count entry width than 16 bits (refcount_bits option), allowing powers of two from 1 to 64. If you do not intend to use internal snapshots, you can for instance use refcount_bits=1 to reduce disk usage a little. qemu-img amend does not yet support changing this option.
  • Improved support for DMG images.
  • Improved detection of unused partitions in qemu-nbd.
  • Support for optimized WRITE SAME operation on files using the fallocate system call.
  • Better interoperability with other hypervisors on large (>127GB) .vpc images.

Guest agent

  • New commands guest-get-memory-blocks, guest-set-memory-blocks, guest-get-memory-block-info (Linux guests only).
  • New command guest-set-user-password.
  • File commands are supported for Windows guests.

User-mode emulation

  • Support for shmat.
  • Support for SCM_CREDENTIALS.
  • Fixed build on NetBSD/sparc64 and NetBSD/arm.

Build dependencies

  • System emulators (qemu-system-*) and block tools (qemu-img, qemu-io, qemu-nbd) now use "__thread" for thread-local storage on all architectures; Previously they only used it on Windows. If your system does not have native TLS support, you will need GCC 4.3 or newer to compile QEMU (this was already the case for Windows in previous releases). In particular, compiling QEMU on Mac OS X with Apple's GCC 4.2.1 is not supported:
    • on Mac OS X 10.7 or newer, you can use Clang (which should be the default compiler when compiling QEMU on these version)
    • on Mac OS X 10.6 or older, you need to build a newer GCC (Apple doesn't provide GPLv3 compilers) or install a binary from fink, homebrew, MacPorts or a similar distribution.

Known issues

  • NVMe guest ABI changed from 2.2 to 2.3.
  • SeaBIOS built from sources may fail tests dependent on placement of the _SM_ signature


  • All code licensed under the SoftFloat-2b license (which is not compatible with the GPL version 2, the license under which QEMU as a whole is distributed) has been removed from QEMU or relicensed under a GPL-compatible license.
  • Recent versions of libxseg, used by the Archipelago block device backend, have upgraded from GPL version 2 to GPL version 3. QEMU includes GPL "v2 only" code, which is not compatible with GPLv3. For this reason, and to prevent accidental license violations, Archipelago is disabled by default in QEMU 2.3 and the configure script will warn to remind the user.

Note that these release notes do not constitute any advice about software licensing. If you have doubts, please consult a lawyer.