target/i386/tcg: Reorg push/pop within seg_helper.c
[qemu/ar7.git] / docs / about / deprecated.rst
blob20b7a17cf07eac77623d7ad3ab2bfa3e35002c0b
1 .. _Deprecated features:
3 Deprecated features
4 ===================
6 In general features are intended to be supported indefinitely once
7 introduced into QEMU. In the event that a feature needs to be removed,
8 it will be listed in this section. The feature will remain functional for the
9 release in which it was deprecated and one further release. After these two
10 releases, the feature is liable to be removed. Deprecated features may also
11 generate warnings on the console when QEMU starts up, or if activated via a
12 monitor command, however, this is not a mandatory requirement.
14 As a special exception to this general timeframe, rather than have an
15 indefinite lifetime, versioned machine types are only intended to be
16 supported for a period of 6 years, equivalent to 18 QEMU releases. All
17 versioned machine types will be automatically marked deprecated after an
18 initial 3 years (9 QEMU releases) has passed, and will then be deleted after
19 a further 3 year period has passed. It is recommended that a deprecated
20 machine type is only used for incoming migrations and restore of saved state,
21 for pre-existing VM deployments. They should be scheduled for updating to a
22 newer machine type during an appropriate service window. Newly deployed VMs
23 should exclusively use a non-deprecated machine type, with use of the most
24 recent version highly recommended. Non-versioned machine types follow the
25 general feature deprecation policy.
27 Prior to the 2.10.0 release there was no official policy on how
28 long features would be deprecated prior to their removal, nor
29 any documented list of which features were deprecated. Thus
30 any features deprecated prior to 2.10.0 will be treated as if
31 they were first deprecated in the 2.10.0 release.
33 What follows is a list of all features currently marked as
34 deprecated.
36 System emulator command line arguments
37 --------------------------------------
39 Short-form boolean options (since 6.0)
40 ''''''''''''''''''''''''''''''''''''''
42 Boolean options such as ``share=on``/``share=off`` could be written
43 in short form as ``share`` and ``noshare``.  This is now deprecated
44 and will cause a warning.
46 ``delay`` option for socket character devices (since 6.0)
47 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
49 The replacement for the ``nodelay`` short-form boolean option is ``nodelay=on``
50 rather than ``delay=off``.
52 Plugin argument passing through ``arg=<string>`` (since 6.1)
53 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
55 Passing TCG plugins arguments through ``arg=`` is redundant is makes the
56 command-line less readable, especially when the argument itself consist of a
57 name and a value, e.g. ``-plugin plugin_name,arg="arg_name=arg_value"``.
58 Therefore, the usage of ``arg`` is redundant. Single-word arguments are treated
59 as short-form boolean values, and passed to plugins as ``arg_name=on``.
60 However, short-form booleans are deprecated and full explicit ``arg_name=on``
61 form is preferred.
63 ``-smp`` (Unsupported "parameter=1" SMP configurations) (since 9.0)
64 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
66 Specified CPU topology parameters must be supported by the machine.
68 In the SMP configuration, users should provide the CPU topology parameters that
69 are supported by the target machine.
71 However, historically it was allowed for users to specify the unsupported
72 topology parameter as "1", which is meaningless. So support for this kind of
73 configurations (e.g. -smp drawers=1,books=1,clusters=1 for x86 PC machine) is
74 marked deprecated since 9.0, users have to ensure that all the topology members
75 described with -smp are supported by the target machine.
77 ``-runas`` (since 9.1)
78 ----------------------
80 Use ``-run-with user=..`` instead.
83 User-mode emulator command line arguments
84 -----------------------------------------
86 ``-p`` (since 9.0)
87 ''''''''''''''''''
89 The ``-p`` option pretends to control the host page size.  However,
90 it is not possible to change the host page size, and using the
91 option only causes failures.
93 QEMU Machine Protocol (QMP) commands
94 ------------------------------------
96 ``blockdev-open-tray``, ``blockdev-close-tray`` argument ``device`` (since 2.8)
97 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
99 Use argument ``id`` instead.
101 ``eject`` argument ``device`` (since 2.8)
102 '''''''''''''''''''''''''''''''''''''''''
104 Use argument ``id`` instead.
106 ``blockdev-change-medium`` argument ``device`` (since 2.8)
107 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
109 Use argument ``id`` instead.
111 ``block_set_io_throttle`` argument ``device`` (since 2.8)
112 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
114 Use argument ``id`` instead.
116 ``blockdev-add`` empty string argument ``backing`` (since 2.10)
117 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
119 Use argument value ``null`` instead.
121 ``block-commit`` arguments ``base`` and ``top`` (since 3.1)
122 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
124 Use arguments ``base-node`` and ``top-node`` instead.
126 ``nbd-server-add`` and ``nbd-server-remove`` (since 5.2)
127 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
129 Use the more generic commands ``block-export-add`` and ``block-export-del``
130 instead.  As part of this deprecation, where ``nbd-server-add`` used a
131 single ``bitmap``, the new ``block-export-add`` uses a list of ``bitmaps``.
133 ``query-qmp-schema`` return value member ``values`` (since 6.2)
134 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
136 Member ``values`` in return value elements with meta-type ``enum`` is
137 deprecated.  Use ``members`` instead.
139 ``drive-backup`` (since 6.2)
140 ''''''''''''''''''''''''''''
142 Use ``blockdev-backup`` in combination with ``blockdev-add`` instead.
143 This change primarily separates the creation/opening process of the backup
144 target with explicit, separate steps. ``blockdev-backup`` uses mostly the
145 same arguments as ``drive-backup``, except the ``format`` and ``mode``
146 options are removed in favor of using explicit ``blockdev-create`` and
147 ``blockdev-add`` calls. See :doc:`/interop/live-block-operations` for
148 details.
150 Incorrectly typed ``device_add`` arguments (since 6.2)
151 ''''''''''''''''''''''''''''''''''''''''''''''''''''''
153 Due to shortcomings in the internal implementation of ``device_add``, QEMU
154 incorrectly accepts certain invalid arguments: Any object or list arguments are
155 silently ignored. Other argument types are not checked, but an implicit
156 conversion happens, so that e.g. string values can be assigned to integer
157 device properties or vice versa.
159 This is a bug in QEMU that will be fixed in the future so that previously
160 accepted incorrect commands will return an error. Users should make sure that
161 all arguments passed to ``device_add`` are consistent with the documented
162 property types.
164 Host Architectures
165 ------------------
167 BE MIPS (since 7.2)
168 '''''''''''''''''''
170 As Debian 10 ("Buster") moved into LTS the big endian 32 bit version of
171 MIPS moved out of support making it hard to maintain our
172 cross-compilation CI tests of the architecture. As we no longer have
173 CI coverage support may bitrot away before the deprecation process
174 completes. The little endian variants of MIPS (both 32 and 64 bit) are
175 still a supported host architecture.
177 System emulation on 32-bit x86 hosts (since 8.0)
178 ''''''''''''''''''''''''''''''''''''''''''''''''
180 Support for 32-bit x86 host deployments is increasingly uncommon in mainstream
181 OS distributions given the widespread availability of 64-bit x86 hardware.
182 The QEMU project no longer considers 32-bit x86 support for system emulation to
183 be an effective use of its limited resources, and thus intends to discontinue
184 it. Since all recent x86 hardware from the past >10 years is capable of the
185 64-bit x86 extensions, a corresponding 64-bit OS should be used instead.
188 System emulator CPUs
189 --------------------
191 ``power5+`` and ``power7+`` CPU names (since 9.0)
192 '''''''''''''''''''''''''''''''''''''''''''''''''
194 The character "+" in device (and thus also CPU) names is not allowed
195 in the QEMU object model anymore. ``power5+``, ``power5+_v2.1``,
196 ``power7+`` and ``power7+_v2.1`` are currently still supported via
197 an alias, but for consistency these will get removed in a future
198 release, too. Use ``power5p_v2.1`` and ``power7p_v2.1`` instead.
200 ``Sun-UltraSparc-IIIi+`` and ``Sun-UltraSparc-IV+`` CPU names (since 9.1)
201 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
203 The character "+" in device (and thus also CPU) names is not allowed
204 in the QEMU object model anymore. ``Sun-UltraSparc-IIIi+`` and
205 ``Sun-UltraSparc-IV+`` are currently still supported via a workaround,
206 but for consistency these will get removed in a future release, too.
207 Use ``Sun-UltraSparc-IIIi-plus`` and ``Sun-UltraSparc-IV-plus`` instead.
209 CRIS CPU architecture (since 9.0)
210 '''''''''''''''''''''''''''''''''
212 The CRIS architecture was pulled from Linux in 4.17 and the compiler
213 is no longer packaged in any distro making it harder to run the
214 ``check-tcg`` tests. Unless we can improve the testing situation there
215 is a chance the code will bitrot without anyone noticing.
217 System emulator machines
218 ------------------------
220 Arm ``virt`` machine ``dtb-kaslr-seed`` property (since 7.1)
221 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
223 The ``dtb-kaslr-seed`` property on the ``virt`` board has been
224 deprecated; use the new name ``dtb-randomness`` instead. The new name
225 better reflects the way this property affects all random data within
226 the device tree blob, not just the ``kaslr-seed`` node.
228 ``pc-i440fx-2.4`` up to ``pc-i440fx-2.12`` (since 9.1)
229 ''''''''''''''''''''''''''''''''''''''''''''''''''''''
231 These old machine types are quite neglected nowadays and thus might have
232 various pitfalls with regards to live migration. Use a newer machine type
233 instead.
235 ``shix`` (since 9.0)
236 ''''''''''''''''''''
238 The machine is no longer in existence and has been long unmaintained
239 in QEMU. This also holds for the TC51828 16MiB flash that it uses.
241 ``pseries-2.1`` up to ``pseries-2.12`` (since 9.0)
242 ''''''''''''''''''''''''''''''''''''''''''''''''''
244 Older pseries machines before version 3.0 have undergone many changes
245 to correct issues, mostly regarding migration compatibility. These are
246 no longer maintained and removing them will make the code easier to
247 read and maintain. Use versions 3.0 and above as a replacement.
249 Arm machines ``akita``, ``borzoi``, ``cheetah``, ``connex``, ``mainstone``, ``n800``, ``n810``, ``spitz``, ``terrier``, ``tosa``, ``verdex``, ``z2`` (since 9.0)
250 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
252 QEMU includes models of some machine types where the QEMU code that
253 emulates their SoCs is very old and unmaintained. This code is now
254 blocking our ability to move forward with various changes across
255 the codebase, and over many years nobody has been interested in
256 trying to modernise it. We don't expect any of these machines to have
257 a large number of users, because they're all modelling hardware that
258 has now passed away into history. We are therefore dropping support
259 for all machine types using the PXA2xx and OMAP2 SoCs. We are also
260 dropping the ``cheetah`` OMAP1 board, because we don't have any
261 test images for it and don't know of anybody who does; the ``sx1``
262 and ``sx1-v1`` OMAP1 machines remain supported for now.
264 PPC 405 ``ref405ep`` machine (since 9.1)
265 ''''''''''''''''''''''''''''''''''''''''
267 The ``ref405ep`` machine and PPC 405 CPU have no known users, firmware
268 images are not available, OpenWRT dropped support in 2019, U-Boot in
269 2017, Linux also is dropping support in 2024. It is time to let go of
270 this ancient hardware and focus on newer CPUs and platforms.
272 Arm ``tacoma-bmc`` machine (since 9.1)
273 ''''''''''''''''''''''''''''''''''''''''
275 The ``tacoma-bmc`` machine was a board including an AST2600 SoC based
276 BMC and a witherspoon like OpenPOWER system. It was used for bring up
277 of the AST2600 SoC in labs.  It can be easily replaced by the
278 ``rainier-bmc`` machine which is a real product.
280 Backend options
281 ---------------
283 Using non-persistent backing file with pmem=on (since 6.1)
284 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
286 This option is used when ``memory-backend-file`` is consumed by emulated NVDIMM
287 device. However enabling ``memory-backend-file.pmem`` option, when backing file
288 is (a) not DAX capable or (b) not on a filesystem that support direct mapping
289 of persistent memory, is not safe and may lead to data loss or corruption in case
290 of host crash.
291 Options are:
293     - modify VM configuration to set ``pmem=off`` to continue using fake NVDIMM
294       (without persistence guaranties) with backing file on non DAX storage
295     - move backing file to NVDIMM storage and keep ``pmem=on``
296       (to have NVDIMM with persistence guaranties).
298 Device options
299 --------------
301 Emulated device options
302 '''''''''''''''''''''''
304 ``-device nvme-ns,eui64-default=on|off`` (since 7.1)
305 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
307 In QEMU versions 6.1, 6.2 and 7.0, the ``nvme-ns`` generates an EUI-64
308 identifier that is not globally unique. If an EUI-64 identifier is required, the
309 user must set it explicitly using the ``nvme-ns`` device parameter ``eui64``.
311 ``-device nvme,use-intel-id=on|off`` (since 7.1)
312 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
314 The ``nvme`` device originally used a PCI Vendor/Device Identifier combination
315 from Intel that was not properly allocated. Since version 5.2, the controller
316 has used a properly allocated identifier. Deprecate the ``use-intel-id``
317 machine compatibility parameter.
319 ``-device cxl-type3,memdev=xxxx`` (since 8.0)
320 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
322 The ``cxl-type3`` device initially only used a single memory backend.  With
323 the addition of volatile memory support, it is now necessary to distinguish
324 between persistent and volatile memory backends.  As such, memdev is deprecated
325 in favor of persistent-memdev.
327 ``-fsdev proxy`` and ``-virtfs proxy`` (since 8.1)
328 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
330 The 9p ``proxy`` filesystem backend driver has been deprecated and will be
331 removed (along with its proxy helper daemon) in a future version of QEMU. Please
332 use ``-fsdev local`` or ``-virtfs local`` for using the 9p ``local`` filesystem
333 backend, or alternatively consider deploying virtiofsd instead.
335 The 9p ``proxy`` backend was originally developed as an alternative to the 9p
336 ``local`` backend. The idea was to enhance security by dispatching actual low
337 level filesystem operations from 9p server (QEMU process) over to a separate
338 process (the virtfs-proxy-helper binary). However this alternative never gained
339 momentum. The proxy backend is much slower than the local backend, hasn't seen
340 any development in years, and showed to be less secure, especially due to the
341 fact that its helper daemon must be run as root, whereas with the local backend
342 QEMU is typically run as unprivileged user and allows to tighten behaviour by
343 mapping permissions et al by using its 'mapped' security model option.
345 Nowadays it would make sense to reimplement the ``proxy`` backend by using
346 QEMU's ``vhost`` feature, which would eliminate the high latency costs under
347 which the 9p ``proxy`` backend currently suffers. However as of to date nobody
348 has indicated plans for such kind of reimplementation unfortunately.
350 RISC-V 'any' CPU type ``-cpu any`` (since 8.2)
351 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
353 The 'any' CPU type was introduced back in 2018 and has been around since the
354 initial RISC-V QEMU port. Its usage has always been unclear: users don't know
355 what to expect from a CPU called 'any', and in fact the CPU does not do anything
356 special that isn't already done by the default CPUs rv32/rv64.
358 After the introduction of the 'max' CPU type, RISC-V now has a good coverage
359 of generic CPUs: rv32 and rv64 as default CPUs and 'max' as a feature complete
360 CPU for both 32 and 64 bit builds. Users are then discouraged to use the 'any'
361 CPU type starting in 8.2.
363 RISC-V CPU properties which start with capital 'Z' (since 8.2)
364 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
366 All RISC-V CPU properties which start with capital 'Z' are being deprecated
367 starting in 8.2. The reason is that they were wrongly added with capital 'Z'
368 in the past. CPU properties were later added with lower-case names, which
369 is the format we want to use from now on.
371 Users which try to use these deprecated properties will receive a warning
372 recommending to switch to their stable counterparts:
374 - "Zifencei" should be replaced with "zifencei"
375 - "Zicsr" should be replaced with "zicsr"
376 - "Zihintntl" should be replaced with "zihintntl"
377 - "Zihintpause" should be replaced with "zihintpause"
378 - "Zawrs" should be replaced with "zawrs"
379 - "Zfa" should be replaced with "zfa"
380 - "Zfh" should be replaced with "zfh"
381 - "Zfhmin" should be replaced with "zfhmin"
382 - "Zve32f" should be replaced with "zve32f"
383 - "Zve64f" should be replaced with "zve64f"
384 - "Zve64d" should be replaced with "zve64d"
386 ``-device sd-card,spec_version=1`` (since 9.1)
387 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
389 SD physical layer specification v2.00 supersedes the v1.10 one.
390 v2.00 is the default since QEMU 3.0.0.
392 Block device options
393 ''''''''''''''''''''
395 ``"backing": ""`` (since 2.12)
396 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
398 In order to prevent QEMU from automatically opening an image's backing
399 chain, use ``"backing": null`` instead.
401 ``rbd`` keyvalue pair encoded filenames: ``""`` (since 3.1)
402 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
404 Options for ``rbd`` should be specified according to its runtime options,
405 like other block drivers.  Legacy parsing of keyvalue pair encoded
406 filenames is useful to open images with the old format for backing files;
407 These image files should be updated to use the current format.
409 Example of legacy encoding::
411   json:{"file.driver":"rbd", "file.filename":"rbd:rbd/name"}
413 The above, converted to the current supported format::
415   json:{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"}
417 ``iscsi,password=xxx`` (since 8.0)
418 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
420 Specifying the iSCSI password in plain text on the command line using the
421 ``password`` option is insecure. The ``password-secret`` option should be
422 used instead, to refer to a ``--object secret...`` instance that provides
423 a password via a file, or encrypted.
425 Character device options
426 ''''''''''''''''''''''''
428 Backend ``memory`` (since 9.0)
429 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
431 ``memory`` is a deprecated synonym for ``ringbuf``.
433 CPU device properties
434 '''''''''''''''''''''
436 ``pcommit`` on x86 (since 9.1)
437 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
439 The PCOMMIT instruction was never included in any physical processor.
440 It was implemented as a no-op instruction in TCG up to QEMU 9.0, but
441 only with ``-cpu max`` (which does not guarantee migration compatibility
442 across versions).
444 ``pmu-num=n`` on RISC-V CPUs (since 8.2)
445 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
447 In order to support more flexible counter configurations this has been replaced
448 by a ``pmu-mask`` property. If set of counters is continuous then the mask can
449 be calculated with ``((2 ^ n) - 1) << 3``. The least significant three bits
450 must be left clear.
453 Backwards compatibility
454 -----------------------
456 Runnability guarantee of CPU models (since 4.1)
457 '''''''''''''''''''''''''''''''''''''''''''''''
459 Previous versions of QEMU never changed existing CPU models in
460 ways that introduced additional host software or hardware
461 requirements to the VM.  This allowed management software to
462 safely change the machine type of an existing VM without
463 introducing new requirements ("runnability guarantee").  This
464 prevented CPU models from being updated to include CPU
465 vulnerability mitigations, leaving guests vulnerable in the
466 default configuration.
468 The CPU model runnability guarantee won't apply anymore to
469 existing CPU models.  Management software that needs runnability
470 guarantees must resolve the CPU model aliases using the
471 ``alias-of`` field returned by the ``query-cpu-definitions`` QMP
472 command.
474 While those guarantees are kept, the return value of
475 ``query-cpu-definitions`` will have existing CPU model aliases
476 point to a version that doesn't break runnability guarantees
477 (specifically, version 1 of those CPU models).  In future QEMU
478 versions, aliases will point to newer CPU model versions
479 depending on the machine type, so management software must
480 resolve CPU model aliases before starting a virtual machine.
482 Migration
483 ---------
485 ``fd:`` URI when used for file migration (since 9.1)
486 ''''''''''''''''''''''''''''''''''''''''''''''''''''
488 The ``fd:`` URI can currently provide a file descriptor that
489 references either a socket or a plain file. These are two different
490 types of migration. In order to reduce ambiguity, the ``fd:`` URI
491 usage of providing a file descriptor to a plain file has been
492 deprecated in favor of explicitly using the ``file:`` URI with the
493 file descriptor being passed as an ``fdset``. Refer to the ``add-fd``
494 command documentation for details on the ``fdset`` usage.