We have a very frequent pattern of creating a coroutine from a function with several arguments: - create a structure to pack parameters - create _entry function to call original function taking parameters from struct - do different magic to handle completion: set ret to NOT_DONE or EINPROGRESS or use separate bool field - fill the struct and create coroutine from _entry function with this struct as a parameter - do coroutine enter and BDRV_POLL_WHILE loop Let's reduce code duplication by generating coroutine wrappers. This patch adds scripts/block-coroutine-wrapper.py together with some friends, which will generate functions with declared prototypes marked by the 'generated_co_wrapper' specifier. The usage of new code generation is as follows: 1. define the coroutine function somewhere int coroutine_fn bdrv_co_NAME(...) {...} 2. declare in some header file int generated_co_wrapper bdrv_NAME(...); with same list of parameters (generated_co_wrapper is defined in "include/block/block.h"). 3. Make sure the block_gen_c declaration in block/meson.build mentions the file with your marker function. Still, no function is now marked, this work is for the following commit. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20200924185414.28642-5-vsementsov@virtuozzo.com> [Added encoding='utf-8' to open() calls as requested by Vladimir. Fixed typo and grammar issues pointed out by Eric Blake. Removed clang-format dependency that caused build test issues. --Stefan] Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
36 lines
581 B
ReStructuredText
36 lines
581 B
ReStructuredText
.. This is the top level page for the 'devel' manual.
|
|
|
|
|
|
QEMU Developer's Guide
|
|
======================
|
|
|
|
This manual documents various parts of the internals of QEMU.
|
|
You only need to read it if you are interested in reading or
|
|
modifying QEMU's source code.
|
|
|
|
Contents:
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
|
|
build-system
|
|
kconfig
|
|
loads-stores
|
|
memory
|
|
migration
|
|
atomics
|
|
stable-process
|
|
testing
|
|
decodetree
|
|
secure-coding-practices
|
|
tcg
|
|
tcg-icount
|
|
multi-thread-tcg
|
|
tcg-plugins
|
|
bitops
|
|
reset
|
|
s390-dasd-ipl
|
|
clocks
|
|
qom
|
|
block-coroutine-wrapper
|