]> git.proxmox.com Git - mirror_qemu.git/commit - block/block-gen.h
scripts: add block-coroutine-wrapper.py
authorVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Thu, 24 Sep 2020 18:54:11 +0000 (21:54 +0300)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 5 Oct 2020 09:59:06 +0000 (10:59 +0100)
commitaaaa20b69b93c961ed8064c553a3577f8c072982
tree9f0ae1849707f6c1295eccecbd388d223e9674fc
parent21c2283ebc8139108aee89c3a18881b29d3c075a
scripts: add block-coroutine-wrapper.py

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>
block/block-gen.h [new file with mode: 0644]
block/meson.build
docs/devel/block-coroutine-wrapper.rst [new file with mode: 0644]
docs/devel/index.rst
include/block/block.h
scripts/block-coroutine-wrapper.py [new file with mode: 0644]