qemu-e2k/include/block
Alberto Faria 0f3de970fe block: Add no_coroutine_fn and coroutine_mixed_fn marker
Add more annotations to functions, describing valid and invalid
calls from coroutine to non-coroutine context.

When applied to a function, no_coroutine_fn advertises that it should
not be called from coroutine_fn functions.  This can be because the
function blocks or, in the case of generated_co_wrapper, to enforce
that coroutine_fn functions directly call the coroutine_fn that backs
the generated_co_wrapper.

coroutine_mixed_fn instead is for function that can be called in
both coroutine and non-coroutine context, but will suspend when
called in coroutine context.  Annotating them is a first step
towards enforcing that non-annotated functions are absolutely
not going to suspend.

These can be used for example with the vrc tool:

    # find functions that *really* cannot be called from no_coroutine_fn
    (vrc) load --loader clang libblock.fa.p/meson-generated_.._block_block-gen.c.o
    (vrc) paths [no_coroutine_fn,!coroutine_mixed_fn]
    bdrv_remove_persistent_dirty_bitmap
    bdrv_create
    bdrv_can_store_new_dirty_bitmap

    # find how coroutine_fns end up calling a mixed function
    (vrc) load --loader clang --force libblock.fa.p/*.c.o
    (vrc) paths [coroutine_fn] [!no_coroutine_fn]* [coroutine_mixed_fn]
    ...
    bdrv_pread <- vhdx_log_write <- vhdx_log_write_and_flush <- vhdx_co_writev
    ...

Signed-off-by: Alberto Faria <afaria@redhat.com>
[Rebase, add coroutine_mixed_fn. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20221216110758.559947-3-pbonzini@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2023-01-24 18:26:41 +01:00
..
accounting.h block: pass OnOffAuto instead of bool to block_acct_setup() 2022-09-30 18:02:30 +02:00
aio_task.h coroutine: Move coroutine_fn to qemu/osdep.h, trim includes 2023-01-19 10:18:28 +01:00
aio-wait.h aio-wait.h: introduce AIO_WAIT_WHILE_UNLOCKED 2022-10-07 12:11:41 +02:00
aio.h coroutine: Use Coroutine typedef name instead of structure tag 2023-01-20 07:23:45 +01:00
block_backup.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block_int-common.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block_int-global-state.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block_int-io.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block_int.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block-common.h block: Add no_coroutine_fn and coroutine_mixed_fn marker 2023-01-24 18:26:41 +01:00
block-copy.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block-global-state.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block-hmp-cmds.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block-io.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
blockjob_int.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
blockjob.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
dirty-bitmap.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
export.h
fuse.h
graph-lock.h coroutine: Move coroutine_fn to qemu/osdep.h, trim includes 2023-01-19 10:18:28 +01:00
nbd.h nbd: remove incorrect coroutine_fn annotations 2022-10-07 12:11:40 +02:00
nvme.h nvme: Fix misleading macro when mixed with ternary operator 2022-07-15 10:40:33 +02:00
qapi.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
qdict.h include: move qdict_{crumple,flatten} declarations 2022-04-21 17:03:51 +04:00
raw-aio.h coroutine: Clean up superfluous inclusion of qemu/coroutine.h 2023-01-19 10:18:28 +01:00
replication.h
reqlist.h
snapshot.h
thread-pool.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
throttle-groups.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
write-threshold.h