-\input texinfo @c -*- texinfo -*-
-@c %**start of header
-@setfilename qemu-tech.info
-
-@documentlanguage en
-@documentencoding UTF-8
-
-@settitle QEMU Internals
-@exampleindent 0
-@paragraphindent 0
-@c %**end of header
-
-@ifinfo
-@direntry
-* QEMU Internals: (qemu-tech). The QEMU Emulator Internals.
-@end direntry
-@end ifinfo
-
-@iftex
-@titlepage
-@sp 7
-@center @titlefont{QEMU Internals}
-@sp 3
-@end titlepage
-@end iftex
-
-@ifnottex
-@node Top
-@top
+@node Implementation notes
+@appendix Implementation notes
@menu
* CPU emulation::
* Translator Internals::
* QEMU compared to other emulators::
+* Managed start up options::
* Bibliography::
@end menu
-@end ifnottex
-
-@contents
@node CPU emulation
-@chapter CPU emulation
+@section CPU emulation
@menu
* x86:: x86 and x86-64 emulation
@end menu
@node x86
-@section x86 and x86-64 emulation
+@subsection x86 and x86-64 emulation
QEMU x86 target features:
@end itemize
@node ARM
-@section ARM emulation
+@subsection ARM emulation
@itemize
@end itemize
@node MIPS
-@section MIPS emulation
+@subsection MIPS emulation
@itemize
@end itemize
@node PPC
-@section PowerPC emulation
+@subsection PowerPC emulation
@itemize
@end itemize
@node SPARC
-@section Sparc32 and Sparc64 emulation
+@subsection Sparc32 and Sparc64 emulation
@itemize
@end itemize
@node Xtensa
-@section Xtensa emulation
+@subsection Xtensa emulation
@itemize
@end itemize
@node Translator Internals
-@chapter Translator Internals
+@section Translator Internals
QEMU is a dynamic translator. When it first encounters a piece of code,
it converts it to the host instruction set. Usually dynamic translators
@end table
@node QEMU compared to other emulators
-@chapter QEMU compared to other emulators
+@section QEMU compared to other emulators
Like bochs [1], QEMU emulates an x86 CPU. But QEMU is much faster than
bochs as it uses dynamic compilation. Bochs is closely tied to x86 PC
[12] uses QEMU to simulate a system where some hardware devices are
developed in SystemC.
+@node Managed start up options
+@section Managed start up options
+
+In system mode emulation, it's possible to create a VM in a paused state using
+the -S command line option. In this state the machine is completely initialized
+according to command line options and ready to execute VM code but VCPU threads
+are not executing any code. The VM state in this paused state depends on the way
+QEMU was started. It could be in:
+@table @asis
+@item initial state (after reset/power on state)
+@item with direct kernel loading, the initial state could be amended to execute
+code loaded by QEMU in the VM's RAM and with incoming migration
+@item with incoming migration, initial state will by amended with the migrated
+machine state after migration completes.
+@end table
+
+This paused state is typically used by users to query machine state and/or
+additionally configure the machine (by hotplugging devices) in runtime before
+allowing VM code to run.
+
+However, at the -S pause point, it's impossible to configure options that affect
+initial VM creation (like: -smp/-m/-numa ...) or cold plug devices. The
+experimental --preconfig command line option allows pausing QEMU
+before the initial VM creation, in a ``preconfig'' state, where additional
+queries and configuration can be performed via QMP before moving on to
+the resulting configuration startup. In the preconfig state, QEMU only allows
+a limited set of commands over the QMP monitor, where the commands do not
+depend on an initialized machine, including but not limited to:
+@table @asis
+@item qmp_capabilities
+@item query-qmp-schema
+@item query-commands
+@item query-status
+@item x-exit-preconfig
+@end table
+
@node Bibliography
-@chapter Bibliography
+@section Bibliography
@table @asis
QEMU-SystemC, a hardware co-simulator.
@end table
-
-@bye