@node Deprecated features
@appendix Deprecated features

In general features are intended to be supported indefinitely once
introduced into QEMU. In the event that a feature needs to be removed,
it will be listed in this appendix. The feature will remain functional
for 2 releases prior to actual removal. Deprecated features may also
generate warnings on the console when QEMU starts up, or if activated
via a monitor command, however, this is not a mandatory requirement.

Prior to the 2.10.0 release there was no official policy on how
long features would be deprecated prior to their removal, nor
any documented list of which features were deprecated. Thus
any features deprecated prior to 2.10.0 will be treated as if
they were first deprecated in the 2.10.0 release.

What follows is a list of all features currently marked as
deprecated.

@section Build options

@subsection SDL 1.2

Previously QEMU has supported building against both SDL 1.2
and 2.0 series APIs. Support for the SDL 1.2 builds will be
discontinued, so maintainers should switch to using SDL 2.0,
which is the default.

@section System emulator command line arguments

@subsection -machine enforce-config-section=on|off (since 3.1)

The @option{enforce-config-section} parameter is replaced by the
@option{-global migration.send-configuration=@var{on|off}} option.

@subsection -no-kvm (since 1.3.0)

The ``-no-kvm'' argument is now a synonym for setting
``-machine accel=tcg''.

@subsection -usbdevice (since 2.10.0)

The ``-usbdevice DEV'' argument is now a synonym for setting
the ``-device usb-DEV'' argument instead. The deprecated syntax
would automatically enable USB support on the machine type.
If using the new syntax, USB support must be explicitly
enabled via the ``-machine usb=on'' argument.

@subsection -no-frame (since 2.12.0)

The @code{--no-frame} argument works with SDL 1.2 only. The other user
interfaces never implemented this in the first place. So this will be
removed together with SDL 1.2 support.

@subsection -virtioconsole (since 3.0.0)

Option @option{-virtioconsole} has been replaced by
@option{-device virtconsole}.

@subsection -clock (since 3.0.0)

The @code{-clock} option is ignored since QEMU version 1.7.0. There is no
replacement since it is not needed anymore.

@subsection -enable-hax (since 3.0.0)

The @option{-enable-hax} option has been replaced by @option{-accel hax}.
Both options have been introduced in QEMU version 2.9.0.

@subsection -drive file=json:@{...@{'driver':'file'@}@} (since 3.0)

The 'file' driver for drives is no longer appropriate for character or host
devices and will only accept regular files (S_IFREG). The correct driver
for these file types is 'host_cdrom' or 'host_device' as appropriate.

@subsection -net ...,name=@var{name} (since 3.1)

The @option{name} parameter of the @option{-net} option is a synonym
for the @option{id} parameter, which should now be used instead.

@subsection -smp (invalid topologies) (since 3.1)

CPU topology properties should describe whole machine topology including
possible CPUs.

However, historically it was possible to start QEMU with an incorrect topology
where @math{@var{n} <= @var{sockets} * @var{cores} * @var{threads} < @var{maxcpus}},
which could lead to an incorrect topology enumeration by the guest.
Support for invalid topologies will be removed, the user must ensure
topologies described with -smp include all possible cpus, i.e.
  @math{@var{sockets} * @var{cores} * @var{threads} = @var{maxcpus}}.

@section QEMU Machine Protocol (QMP) commands

@subsection block-dirty-bitmap-add "autoload" parameter (since 2.12.0)

"autoload" parameter is now ignored. All bitmaps are automatically loaded
from qcow2 images.

@subsection query-cpus (since 2.12.0)

The ``query-cpus'' command is replaced by the ``query-cpus-fast'' command.

@subsection query-cpus-fast "arch" output member (since 3.0.0)

The ``arch'' output member of the ``query-cpus-fast'' command is
replaced by the ``target'' output member.

@subsection cpu-add (since 4.0)

Use ``device_add'' for hotplugging vCPUs instead of ``cpu-add''.  See
documentation of ``query-hotpluggable-cpus'' for additional
details.

@section Human Monitor Protocol (HMP) commands

@subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove' (since 3.1)

The @option{[hub_id name]} parameter tuple of the 'hostfwd_add' and
'hostfwd_remove' HMP commands has been replaced by @option{netdev_id}.

@subsection cpu-add (since 4.0)

Use ``device_add'' for hotplugging vCPUs instead of ``cpu-add''.  See
documentation of ``query-hotpluggable-cpus'' for additional details.

@section System emulator devices

@subsection bluetooth (since 3.1)

The bluetooth subsystem is unmaintained since many years and likely bitrotten
quite a bit. It will be removed without replacement unless some users speaks
up at the @email{qemu-devel@@nongnu.org} mailing list with information about
their usecases.

@section System emulator machines

@subsection pc-0.12, pc-0.13, pc-0.14 and pc-0.15 (since 4.0)

These machine types are very old and likely can not be used for live migration
from old QEMU versions anymore. A newer machine type should be used instead.

@subsection prep (PowerPC) (since 3.1)

This machine type uses an unmaintained firmware, broken in lots of ways,
and unable to start post-2004 operating systems. 40p machine type should be
used instead.

@section Device options

@subsection Block device options

@subsubsection "backing": "" (since 2.12.0)

In order to prevent QEMU from automatically opening an image's backing
chain, use ``"backing": null'' instead.

@subsubsection rbd keyvalue pair encoded filenames: "" (since 3.1.0)

Options for ``rbd'' should be specified according to its runtime options,
like other block drivers.  Legacy parsing of keyvalue pair encoded
filenames is useful to open images with the old format for backing files;
These image files should be updated to use the current format.

Example of legacy encoding:

@code{json:@{"file.driver":"rbd", "file.filename":"rbd:rbd/name"@}}

The above, converted to the current supported format:

@code{json:@{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"@}}

@subsection vio-spapr-device device options

@subsubsection "irq": "" (since 3.0.0)

The ``irq'' property is obsoleted.
