Update to 2.4.0
# System emulation
## Incompatible changes
* The handling of the floppy device controller is different between <2.4 and \
>=2.4 machine types that use the Q35 chipset (e.g. "-M pc-q35-2.3" \
vs. "-M pc-q35-2.4"). This can cause problems if you are defining \
floppy drives with command-line options such as "-global isa-fdc.driveA=id.
* The ARM 'virt' board default interface type has changed from IDE to virtio. \
This means that some incorrect command lines that we previously silently \
accepted will now fail with an error message like "qemu-system-arm: -drive \
file=img.qcow2,id=foo: Drive 'foo' is already in use because it has been \
automatically connected to another device (did you need 'if=none' in the drive \
options?)". As the error message suggests, you should add \
"if=none" to the -drive option to fix this.
## 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 \
** The "boot-opts" configuration file section matches command-line \
** The "smp-opts" configuration file section matches command-line \
-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 cache.direct=on. It \
will be made an error.
* A few devices will be configured with explicit properties instead of \
implicitly. Unlikely to affect users; for the full list, see the 2.3 ChangeLog.
* 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 \
* The configure option --disable-guest-base is unneeded and will be removed in a \
* Major fixes to the implementation of floating point exceptions.
* New board model xlnx-ep108
* Support for ACPI v5.1 tables in the "-M virt" board.
* Support for instantiation sysbus devices from the command line (using \
"-device") in the "-M virt" board.
* Emulation of the stream ID for MSI writes, for use in GICv3.
* The "virt" board default drive type is now virtio; this means that \
drives created with if=virtio or with no if= specification will be created as \
drives plugged into a virtio-blk-pci device. Short form options like -hda will \
also create this kind of drive. (Note that at time of writing Linux only \
supports the virt board's PCI controller for 32-bit ARM kernels; support has not \
yet made it into the 64-bit kernels. So 64-bit guests will need to continue \
using long command lines and virtio-mmio for now.) Unfortunately this means that \
some old command lines will need to change -- see the "incompatible \
changes" section above for details.
* More accurate emulation of the dp8393x network card and RC4030 DMA/IOMMU \
* Support for microMIPS32 R6 emulation (enabled in new "-cpu \
* Support for unaligned R6 and MSA memory accesses in TCG
* Support for XPA in MIPS32 and LPA in MIPS64 (eXtended and Large Physical \
* Support for MIPS UHI semihosting
* The default RAM size for the pseries machine is 512 MB.
* Support of PCI device hotplug on SPAPR (pSeries).
* Channel I/O is now available when running with TCG. Thus, the default machine \
for qemu-system-s390x is now s390-ccw.
* Several other fixes for TCG (emulation) mode.
* Extended name and UUID in STSI 3.2.2 information block
* Support for reading/writing guest memory while holding the IPTE lock under \
KVM, including access register mode
* Various cleanups in the s390-virtio and virtio-ccw transports
* Support for diag288 watchdog (KVM only).
* Support for vector registers
* Add virtio-1 specific ccws to virtio-ccw (SET_REV and v1 version of SET_VQ)
** Revision 1 (and therefore virtio 1.0) is not yet enabled, however.
* The s390-ccw-virtio machine is now versioned; the first versioned machine is \
** The s390-ccw alias has been removed
* Optimizations to code generated by TCG.
* Fix SunOS 4.1.4 boot on sun4m with OpenBIOS
* Improvements to system management mode emulation, including support for high \
SMRAM and TSEG on machines using the Q35 chipset.
* q35 machine types starting with pc-q35-2.4.0 do not have a floppy disk \
controller. It will be created if you use "-drive if=floppy", \
"-fda" or "-fdb" to add a floppy disk drive, or it can be \
created if necessary with "-device isa-fdc".
* q35 now implements the TCO watchdog. Unlike real hardware, the watchdog is \
disabled when the virtual machine boot, so as to let existing firmware run with \
new QEMU. This may change in the future, but the change would be restricted to \
new machine types.
* Support for MMIO operations outside the "big QEMU lock". For now, \
this only applies to the ACPI PM timer, which can alone improve performance \
substantially for very large Windows guests as long as they do not span multiple \
NUMA nodes in the host. For guests that span multiple NUMA nodes more kernel \
changes are required.
* Support for system management mode (requires Linux 4.1).
* When running under KVM, CPUID information includes the ARAT ("Always \
running APIC timer") bit
# Device emulation and assignment
* Support for memory hot-unplug.
* S3/S4 states can be disabled for boards using the Q35 machine type via \
"-global ICH9_LPC.disable_s3=on" and"-global \
## Block devices
* Minimal support in NVMe emulation for the NVME_VOLATILE_WRITE_CACHE feature.
* The infamous floppy device controller is not added to Q35 boards if not \
explicitly requested and no floppy drives are specified with "-drive \
* I/O throttling now supports "groups" so multiple disks can use share \
a budget (use -drive groups=<name>)
* Performance of the parallels image format block driver has been improved
## Character devices
* Improved support for flow control in virtio-serial.
* Fix macio CDROM detection for PPC
* Fix macio data corruption bug under Darwin/OS X PPC
* AHCI support rerror=stop and werror=stop.
* Support for virtio-keyboard, virtio-mouse, virtio-tablet.
* Support for the "rocker" L2 switch device.
* scsi-generic now supports migration.
* Support for extra PCI root buses using PCI expander bridge devices. Unlike \
PCI-PCI bridges, a PCI expander bridge's bus can be associated with a NUMA node, \
allowing the guest OS to recognize the proximity of a device to RAM and CPUs.
* Support for TPM 2
* Support for resetting AMD Bonaire and Hawaii GPUs
* Platform device passthrough support for Calxeda xgmac devices
* Support for up to 1024 queues.
* Support for ioeventfd in virtio-mmio.
* FIXME: virtio 1
* New virtio-gpu device (only supports accelerated 2D for now)
* New virtio-input-host, virtio-keyboard, virtio-mouse and virtio-tablet devices \
(and corresponding virtio-*-pci devices for use on a PCI bus).
* Support for cross-endian vhost (i.e. little-endian host and big-endian guest, \
or vice versa).
* vhost can now be enabled even if MSI-X is not
* virtio-balloon can tell the guest that it should deflate the balloon on OOM \
* Support for virtio-vga, a VGA device that also supports the virtio-gpu interface.
## Character devices
* Improved support for flow control in spice-char.
* Support for OpenGL-based display rendering in the SDL2 and GTK+ backend. This \
is preparatory work for 3D acceleration.
* Improvements to the Cocoa front-end, fixing full-screen mode and adding a list \
of consoles to the View menu.
* The two extra keys in Brazilian 107-key keyboards are now usable.
* qmp: New MIGRATION event to communicate change in the migration state
* Support for compression of RAM data using multiple threads for compression and \
decompression (using migration capability "compress" and migration \
parameters "compress_threads", "compress_level" and \
* Support for multi-queue vhost-user backends.
## Block devices in system emulation
* The BLOCK_IMAGE_CORRUPTED event has a new "node-name" field.
* FIXME: Throttle groups
* Block device mirroring supports concurrent unmap (aka discard or trim) \
operations on the source device and can create a thin-provisioned image in this \
* Block device mirroring can use discard or "write zero" operations to \
speed up copying of large zero regions.
* FIXME: incremental backup?
## Command-line options
* A longhand version of -global (-global driver=DRIVER,property=PROP,value=VAL) \
is introduced, to set properties globally for devices that have a period in \
their name. The older syntax -global DRIVER.PROP=VAL did not allow this.
* New option -fw_cfg to pass arbitrary binary data to the guest.
* New command line option "-icount sleep=no". The option will run \
emulation at the maximum possible speed: every time the CPU would go to sleep, \
the virtual clock will move to the next timer deadline. For virtual machines \
that have no other sources of non-determinism (e.g. asynchronous block I/O, \
character devices or user input) this will also make execution deterministic.
# Block devices and tools
* The "null" block device now has a new "latency-ns" option \
to delay the answer from the block device.
* The iscsi driver can use the target's FUA capabilities to greatly improve \
roundtrip times in write-through caching modes (cache.writeback=off). These \
modes are recommended when the storage has a non-volatile (battery-backed) \
* Parallels format driver now supports image creation and write to the image. \
Performance is significantly improved.
* qcow2 performance improvements.
* qemu-io supports encrypted qcow2 images (which are deprecated).
* Obsolete audio backends have been removed: esd (superseded by pulseaudio), \
winwave (superseded by dsound), fmod (not compatible with the GPL)
# Guest agent
* Support for building a .msi file with the Windows version of the guest agent \
("make msi"). This requires msitools.
* qemu-ga implements guest-get-fsinfo and guest-network-get-interfaces on Windows too
# User-mode emulation
* The default CPU for qemu-sh4 and qemu-sh4eb is the sh7785.
# Build dependencies
* QEMU now requires a minimum glib version of 2.22. (In particular, we will no \
longer build on a stock RHEL5 or Centos 5 system.)
* QEMU can now optionally be linked against tcmalloc.
* QEMU now compiles using clang 3.5 without warnings, which includes disabling \
GCC features not supported by clang.
* QEMU now compiles with ICC.
* libepoxy is required to compile QEMU with OpenGL support.
* Building on Mac OS X versions earlier than 10.5 is no longer supported.
* Sound on Windows now requires DirectSound (the old 'winwave' default audio \
backend has been dropped).
# Known issues
* SDL audio only works with SDL 1.x.
* Problems with QEMU for Windows and builds from newer versions of MinGW-w64, \
see this thread on qemu-devel (this is not a regression, other versions are also \
** Crash of 64-bit QEMU (Fix)
** Broken networking (Fix)
* Incomplete translations for GTK user interface